Odwracanie listy w pęli for

0

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

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.

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...

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?

2

Czemu nie sprawdzimy?

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

;)
No i dla pewności:

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

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

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.

0

Ok dzięki za rozjaśnienie sytuacji.

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)

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1