Proszę wziąć pod uwagę następujący kod:
i = [1, 2, 3, 5, 8, 13]
j = []
k = 0
for l in i:
j[k] = l
k += 1
print j
Dane wyjściowe (Python 2.6.6 w Win 7 32-bit) to:
> Traceback (most recent call last):
> j[k] = l IndexError: list assignment index out of range
Myślę, że to coś prostego, czego nie rozumiem. Czy ktoś może to wyjaśnić?
append
jest właściwym rozwiązaniem dla twojego przypadku użycia, jednak istnieje metoda wstawiania na liście python, która może wstawiać bezpośrednio do i-tej pozycji na liście.j.insert(k, l)
Odpowiedzi:
j
jest pustą listą, ale próbujesz napisać do elementu[0]
w pierwszej iteracji, która jeszcze nie istnieje.Zamiast tego spróbuj wykonać następujące czynności, aby dodać nowy element na końcu listy:
Oczywiście nigdy nie zrobiłbyś tego w praktyce, gdyby wszystko, co chciałeś zrobić, to skopiować istniejącą listę. Po prostu zrobiłbyś:
Alternatywnie, jeśli chcesz używać listy Python jako tablicy w innych językach, możesz wstępnie utworzyć listę z jej elementami ustawionymi na wartość zerową (
None
w poniższym przykładzie), a później zastąpić wartości w określonych pozycjach:Należy zdać sobie sprawę, że
list
obiekt nie pozwoli ci przypisać wartości do indeksu, który nie istnieje.źródło
Inną opcją jest zainicjowanie
j
:źródło
Rób
j.append(l)
zamiastj[k] = l
ik
w ogóle unikaj .źródło
j+=[l]
.append
jest to o wiele bardziej powszechne (być może z jakiegoś powodu - myślę, że nieco łatwiej to zrozumieć), nie tak naprawdę lepsze w jakikolwiek sposób. (Edytuj @khachik: Nie,+=
modyfikuje w miejscu)Możesz także użyć listy:
lub wykonaj jego kopię za pomocą oświadczenia:
źródło
Unikaj także używania małych liter „L”, ponieważ łatwo jest pomylić je z literami „1”
źródło
Myślę, że to, czego szukasz, to wstawka do metody Python :
Wstawia element x w pozycji i. list.insert (i, x)
źródło
insert
terminu, któryappend
został specjalnie przewidziany do tego celu.[1, 20, 2, 3, 4, 5]
.Możesz użyć słownika (podobnego do tablicy asocjacyjnej) dla j
wydrukuje:
źródło
Jeszcze jeden sposób:
W tym przypadku
j
będzie tablica numpyźródło
Może potrzebujesz rozszerzyć ()
źródło