Hoe kan ik het volgende doen in Python?
array = [0, 10, 20, 40]
for (i = array.length() - 1; i >= 0; i--)
Ik heb de elementen van een array nodig, maar van het einde tot het begin.
Antwoord 1, autoriteit 100%
U kunt gebruik maken van de reversed
functioneer hiervoor als:
>>> array=[0,10,20,40]
>>> for i in reversed(array):
... print(i)
Merk op dat reversed(...)
geen lijst retourneert. U kunt een omgekeerde lijst krijgen met list(reversed(array))
.
Antwoord 2, autoriteit 93%
>>> L = [0,10,20,40]
>>> L[::-1]
[40, 20, 10, 0]
Extended slice-syntaxis wordt goed uitgelegd in de Python What’s new Entry voor release 2.3.5
Op speciaal verzoek in een opmerking dit is de meest actuele slice-documentatie.
Antwoord 3, autoriteit 28%
>>> L = [0,10,20,40]
>>> L.reverse()
>>> L
[40, 20, 10, 0]
Of
>>> L[::-1]
[40, 20, 10, 0]
Antwoord 4, autoriteit 2%
Snijden gebruiken, b.v. Array = array [:: – 1], is een nette truc en zeer pythonic, maar een beetje obscuur voor nieuwelingen misschien. Met behulp van de methode Reverse () is een goede manier om in dagelijkse codering te gaan omdat het gemakkelijk leesbaar is.
Als u echter een lijst op hun plaats moet omkeren zoals in een interviewvraag, kunt u waarschijnlijk niet gebruiken ingebouwde methoden zoals deze. De interviewer zal kijken naar hoe u het probleem nadert in plaats van de diepte van Python-kennis, een algoritmische benadering is vereist. Het volgende voorbeeld, met behulp van een klassieke swap, is misschien een manier om het te doen: –
def reverse_in_place(lst): # Declare a function
size = len(lst) # Get the length of the sequence
hiindex = size - 1
its = size/2 # Number of iterations required
for i in xrange(0, its): # i is the low index pointer
temp = lst[hiindex] # Perform a classic swap
lst[hiindex] = lst[i]
lst[i] = temp
hiindex -= 1 # Decrement the high index pointer
print "Done!"
# Now test it!!
array = [2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]
print array # Print the original sequence
reverse_in_place(array) # Call the function passing the list
print array # Print reversed list
**The result:**
[2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]
Done!
[654, 124, 24, 7, 1, 65, 60, 32, 27, 25, 19, 12, 9, 8, 5, 2]
Merk op dat dit niet werkt op tuples of stringsequenties, omdat snaren en tuples onveranderlijk zijn, d.w.z. u kunt ze niet instellen om elementen te veranderen.
5, Autoriteit 2%
Voor het omkeren van hetzelfde lijstgebruik:
array.reverse()
Om omgekeerde lijst toe te wijzen aan een ander lijstgebruik:
newArray = array[::-1]
Antwoord 6
for x in array[::-1]:
do stuff
Antwoord 7
>>> list1 = [1,2,3]
>>> reversed_list = list(reversed(list1))
>>> reversed_list
>>> [3, 2, 1]
Antwoord 8
array=[0,10,20,40]
for e in reversed(array):
print e
Antwoord 9
Het gebruik van reversed(array) is waarschijnlijk de beste route.
>>> array = [1,2,3,4]
>>> for item in reversed(array):
>>> print item
Moet je begrijpen hoe je dit kunt implementeren zonder de ingebouwde reversed
te gebruiken.
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
Dit zou O(N) tijd moeten kosten.
Antwoord 10
Als u de elementen van de omgekeerde lijst in een andere variabele wilt opslaan, kunt u revArray = array[::-1]
of revArray = list(reversed(array))
.
Maar de eerste variant is iets sneller:
z = range(1000000)
startTimeTic = time.time()
y = z[::-1]
print("Time: %s s" % (time.time() - startTimeTic))
f = range(1000000)
startTimeTic = time.time()
g = list(reversed(f))
print("Time: %s s" % (time.time() - startTimeTic))
Uitgang:
Time: 0.00489711761475 s
Time: 0.00609302520752 s
11
Een andere oplossing zou zijn om numpy.flip Hiervoor
import numpy as np
array = [0, 10, 20, 40]
list(np.flip(array))
[40, 20, 10, 0]
12
Gebruik wat logica
Gebruik een oude schoollogica om te oefenen voor interviews.
Wisselnummers naar achteren. Met behulp van twee wijzers
index[0] and index[last]
def reverse(array):
n = array
first = 0
last = len(array) - 1
while first < last:
holder = n[first]
n[first] = n[last]
n[last] = holder
first += 1
last -= 1
return n
input -> [-1 ,1, 2, 3, 4, 5, 6]
output -> [6, 1, 2, 3, 4, 5, -1]
13
Gebruik Lijstbegrip:
[array[n] for n in range(len(array)-1, -1, -1)]
14
Met minimale hoeveelheid ingebouwde functies, aannemende de instellingen van het interview
array = [1, 2, 3, 4, 5, 6,7, 8]
inverse = [] #create container for inverse array
length = len(array) #to iterate later, returns 8
counter = length - 1 #because the 8th element is on position 7 (as python starts from 0)
for i in range(length):
inverse.append(array[counter])
counter -= 1
print(inverse)
15
Strikt genomen, de vraag is niet hoe een lijst in omgekeerde volgorde te retourneren, maar eerder hoe u een lijst met een lijst met een voorbeeldlijst wilt omkeren array
.
Om een lijst te achterhalen met de naam "array"
Gebruik array.reverse()
.
De ongelooflijk bruikbare segmentmethode zoals beschreven kan ook worden gebruikt om een lijst op zijn plaats te keren door de lijst te definiëren als een gesneden wijziging van zichzelf met array = array[::-1]
.
16
Waarden organiseren:
in Python, Lijsten ‘Bestelling ook kan worden gemanipuleerd met Sorteer, het organiseren van uw variabelen in numerieke / alfabetische volgorde:
Tijdelijk:
Afdrukken (gesorteerd (my_list))
permanent:
my_list.sort (), print (my_list)
U kunt sorteren met de vlag “Reverse = TRUE”:
print(sorted(my_list, reverse=True))
or
my_list.sort(reverse=True), print(my_list)
zonder
te organiseren
Misschien wil u geen waarden sorteren, maar de waarden alleen omkeren. Dan kunnen we het zo doen:
print(list(reversed(my_list)))
**Getallen hebben voorrang op alfabet in volgorde van vermelding. De organisatie van de Python-waarden is geweldig.
Bewerken 1: een verkeerde moderator beweerde dat mijn antwoord een kopie was en heeft mijn oude bericht verwijderd.
Antwoord 17
De meest directe vertaling van uw vereiste in Python is deze for
-instructie:
for i in xrange(len(array) - 1, -1, -1):
print i, array[i]
Dit is nogal cryptisch, maar kan nuttig zijn.
Antwoord 18
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
Antwoord 19
def reverse(text):
output = []
for i in range(len(text)-1, -1, -1):
output.append(text[i])
return output
Antwoord 20
Je zou de lijst altijd kunnen behandelen als een stapel die gewoon de elementen van de bovenkant van de stapel van de achterkant van de lijst haalt. Op die manier profiteer je van de first in last out-kenmerken van een stapel. Natuurlijk consumeer je de 1e array. Ik hou van deze methode omdat het vrij intuïtief is omdat je ziet dat de ene lijst wordt gebruikt vanaf de achterkant, terwijl de andere wordt opgebouwd vanaf de voorkant.
>>> l = [1,2,3,4,5,6]; nl=[]
>>> while l:
nl.append(l.pop())
>>> print nl
[6, 5, 4, 3, 2, 1]
Antwoord 21
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
Antwoord 22
gebruik
print(reversed(list_name))
Antwoord 23
Er zijn 3 methoden om de omgekeerde lijst te krijgen:
-
Snijmethode 1:
reversed_array = array[-1::-1]
-
Snijmethode 2:
reversed_array2 = array[::-1]
-
De ingebouwde functie gebruiken:
reversed_array = array.reverse()
De derde functie heeft het lijstobject in feite omgekeerd. Dat betekent dat er geen kopie van ongerepte gegevens wordt bijgehouden. Dit is een goede aanpak als u de oude versie niet wilt behouden. Maar lijkt geen oplossing te zijn als je de ongerepte en omgekeerde versie wilt.
Antwoord 24
>>> l = [1, 2, 3, 4, 5]
>>> print(reduce(lambda acc, x: [x] + acc, l, []))
[5, 4, 3, 2, 1]
Antwoord 25
Omkering ter plaatse door referenties van tegengestelde indices te wisselen:
>>> 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]
Antwoord 26
Kan worden gedaan met __reverse__
, wat een generator retourneert.
>>> l = [1,2,3,4,5]
>>> for i in l.__reversed__():
... print i
...
5
4
3
2
1
>>>
Antwoord 27
Omgekeerde gebruikersinvoerwaarden in één regelcode:
for i in input()[::-1]: print(i,end='')