Odwracanie listy w pęli for

Odwracanie listy w pęli for
GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Cześć, czy ktoś był by mi w stanie wyjaśnić dlaczego poniższy kod w pełni działa (obraca poprawnie listę)?

Kopiuj
aList = "Hello World!"
print(aList)

aList = list(aList)
print(aList) 

i = 0

for item in aList[::-1]:
    aList[i] = item
    i+=1

print(aList)
aList = ''.join(aList)
print(aList)

Wydaje mi się, że w takiej sytuacji w pęli for gdy iterator przekroczy połowę liczby wszystkich elementów listy to powinien wskazywać elementy zmodyfikowane podczas pierwszej połowy iteracji, a wygląda to taj jakby iterator operował na liście z przed rozpoczęcia pętli.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

To aList[::-1] tworzy kopię listy. W ogóle cały ten kod jest idiotyczny bo samo aList[::-1] już utworzyło ci kopię listy odwróconą i żadna pętla nie jest potrzebna...

GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0
Shalom napisał(a):

To aList[::-1] tworzy kopię listy. W ogóle cały ten kod jest idiotyczny bo samo aList[::-1] już utworzyło ci kopię listy odwróconą i żadna pętla nie jest potrzebna...

Ok dzięki. A to nie jest tak, że 'aList[::-1]' pozwala nam tylko iterować w tył a sama w sobie nie jest odwrócona?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
2

Czemu nie sprawdzimy?

Kopiuj
lista = [1,2,3]
print(id(lista))
print(id(lista[::-1]))

;)
No i dla pewności:

Kopiuj
lista = [1,2,3]
lista2 = lista[::-1]
lista[0] = 5
print(lista2)

Jak widać na liście 2 nie ma żadnej 5.

Silv
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
0

Nie znam się na Pythonie, ale zobacz: https://docs.python.org/2.3/whatsnew/section-slices.html
Czyli ta konstrukcja tworzy Ci odwróconą kopię listy; zresztą, jest bardziej powerful.

GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Ok dzięki za rozjaśnienie sytuacji.

Silv
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
1

Tak na marginesie, problemem może (mogło) być, że w tej konstrukcji użyte są nawiasy kwadratowe, które (w innych językach?) używane są zazwyczaj do oznaczania indeksowania listy. Ciekawym przypadkiem jest tu Bash, gdzie zarówno są używane jako operator indeksowania tablicy (http://www.tldp.org/LDP/abs/html/arrays.html), jak i synonim polecenia test (http://www.tldp.org/LDP/abs/html/testconstructs.html)

  • Rejestracja: dni
  • Ostatnio: dni
0
Silv napisał(a):

Tak na marginesie, problemem może (mogło) być, że w tej konstrukcji użyte są nawiasy kwadratowe, które (w innych językach?) używane są zazwyczaj do oznaczania indeksowania listy. Ciekawym przypadkiem jest tu Bash, gdzie zarówno są używane jako operator indeksowania tablicy (http://www.tldp.org/LDP/abs/html/arrays.html), jak i synonim polecenia test (http://www.tldp.org/LDP/abs/html/testconstructs.html)

  1. Nawiasy kwadratowe w Bashu mają więcej zastosowań (cough globbing)
  2. test, wraz z synonimem [, to odpad wstecznej kompatybilności, którego nie używa się w idiomatycznym Bashu
  3. TLDP to nieaktualne i nierzadko just plain wrong źródło wiedzy: korzystaj z https://mywiki.wooledge.org/ oraz https://wiki.bash-hackers.org

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.