python - मैं अजगर में एक सूची को कैसे उलट सकता हूं?




15 Answers

आप इसके लिए reversed फ़ंक्शन का उपयोग इस प्रकार कर सकते हैं:

>>> array=[0,10,20,40]
>>> for i in reversed(array):
...     print(i)

ध्यान दें कि reversed(...) एक सूची वापस नहीं करता है। आप सूची का उपयोग कर एक उलटा सूची प्राप्त कर सकते हैं list(reversed(array))

मैं पाइथन में यह कैसे कर सकता हूं?

array = [0,10,20,40]
for (i = array.length() - 1 ;i >= 0; i--)

मुझे एक सरणी के तत्वों की आवश्यकता है लेकिन अंत से शुरुआत तक।




>>> L = [0,10,20,40]
>>> L.reverse()
>>> L
[40, 20, 10, 0]

या

>>> L[::-1]
[40, 20, 10, 0]



एक ही सूची का उपयोग करने के लिए उपयोग करें:

array.reverse()

कुछ अन्य सूची में उल्टा सूची असाइन करने के लिए:

newArray = array[::-1] 



for x in array[::-1]:
    do stuff



मुझे लगता है (कुछ अन्य सुझावों के विपरीत) कि l.reverse() Python 3 और 2 में एक लंबी सूची को रिवर्स करने का सबसे तेज़ तरीका है। मुझे यह जानने में दिलचस्पी होगी कि अन्य लोग इन समय को दोहराना चाहते हैं या नहीं।

l[::-1] शायद धीमा है क्योंकि यह इसे वापस करने से पहले सूची की प्रतिलिपि बनाता है। reversed(l) द्वारा किए गए इटरेटर के चारों ओर list() कॉल जोड़ना कुछ ओवरहेड जोड़ना चाहिए। बेशक अगर आप सूची या पुनरावर्तक की प्रतिलिपि चाहते हैं तो उन संबंधित तरीकों का उपयोग करें, लेकिन यदि आप सूची को उलटा करना चाहते हैं तो l.reverse() सबसे तेज़ तरीका प्रतीत होता है।

कार्य

def rev_list1(l):
    return l[::-1]

def rev_list2(l):
    return list(reversed(l))

def rev_list3(l):
    l.reverse()
    return l

सूची

l = list(range(1000000))

पायथन 3.5 समय

timeit(lambda: rev_list1(l), number=1000)
# 6.48
timeit(lambda: rev_list2(l), number=1000)
# 7.13
timeit(lambda: rev_list3(l), number=1000)
# 0.44

पायथन 2.7 समय

timeit(lambda: rev_list1(l), number=1000)
# 6.76
timeit(lambda: rev_list2(l), number=1000)
# 9.18
timeit(lambda: rev_list3(l), number=1000)
# 0.46



array=[0,10,20,40]
for e in reversed(array):
  print e



उलटा (सरणी) का उपयोग करना सबसे अच्छा मार्ग होगा।

>>> array = [1,2,3,4]
>>> for item in reversed(array):
>>>     print item

क्या आपको यह समझने की आवश्यकता है कि अंतर्निहित reversed उपयोग किए बिना इसे कैसे कार्यान्वित किया जा सकता reversed

def reverse(a):
    midpoint = len(a)/2
    for item in a[:midpoint]:
        otherside = (len(a) - a.index(item)) - 1
        temp = a[otherside]
        a[otherside] = a[a.index(item)]
        a[a.index(item)] = temp
    return a

यह ओ (एन) समय लेना चाहिए।




कड़ाई से बोलते हुए, सवाल यह नहीं है कि एक सूची को रिवर्स में कैसे वापस किया जाए, बल्कि उदाहरण सूची नाम array साथ सूची को कैसे उलट किया जाए।

"array" नाम की एक सूची को उलट करने के लिए array.reverse() उपयोग करें।

वर्णन के रूप में अविश्वसनीय रूप से उपयोगी टुकड़ा विधि का उपयोग array = array[::-1] का उपयोग करके स्वयं को एक कटा हुआ संशोधन के रूप में सूची को परिभाषित करके एक सूची को विपरीत करने के लिए भी किया जा सकता है।




सूची समझ:

[array[n] for n in range(len(array)-1, -1, -1)]




पायथन में आपकी आवश्यकता का सबसे प्रत्यक्ष अनुवाद यह कथन के for है:

for i in xrange(len(array) - 1, -1, -1):
   print i, array[i]

यह बल्कि गूढ़ है लेकिन उपयोगी हो सकता है।




आप हमेशा सूची के पीछे के अंत से स्टैक के शीर्ष से तत्वों को पॉप-अप करने वाले स्टैक की तरह सूची का इलाज कर सकते हैं। इस तरह आप एक ढेर की आखिरी विशेषताओं में पहली बार लाभ उठाते हैं। बेशक आप पहली सरणी का उपभोग कर रहे हैं। मुझे इस विधि को पसंद है कि यह बहुत सहज है कि आप पिछली छोर से एक सूची का उपभोग करते हुए देखते हैं जबकि दूसरा सामने के अंत से बनाया जा रहा है।

>>> l = [1,2,3,4,5,6]; nl=[]
>>> while l:
        nl.append(l.pop())  
>>> print nl
[6, 5, 4, 3, 2, 1]



list_data = [1,2,3,4,5]
l = len(list_data)
i=l+1
rev_data = []
while l>0:
  j=i-l
  l-=1
  rev_data.append(list_data[-j])
print "After Rev:- %s" %rev_data 



आप सरणी में सरणी के माध्यम से कदम उठाने के लिए सरणी अनुक्रमणिका के bitwise पूरक का भी उपयोग कर सकते हैं:

>>> array = [0, 10, 20, 40]
>>> [array[~i] for i, _ in enumerate(array)]
[40, 20, 10, 0]

आप जो कुछ भी करते हैं, इसे इस तरह से न करें।




def reverse(my_list):
  L = len(my_list)
  for i in range(L/2):
    my_list[i], my_list[L-i - 1] = my_list[L-i-1], my_list[i]
  return my_list



विपरीत सूचकांक के संदर्भों को स्विच करके जगह में उलटा:

>>> l = [1,2,3,4,5,6,7]    
>>> for i in range(len(l)//2):
...     l[i], l[-1-i] = l[-1-i], l[i]
...
>>> l
[7, 6, 5, 4, 3, 2, 1]



Related


Tags

python   list