Chcę utworzyć pustą listę (lub inną najlepszą metodę), która może zawierać 10 elementów.
Następnie chcę przypisać wartości do tej listy, na przykład powinno to wyświetlać od 0 do 9:
s1 = list();
for i in range(0,9):
s1[i] = i
print s1
Ale kiedy uruchamiam ten kod, generuje błąd lub w innym przypadku po prostu wyświetla []
(pusty).
Czy ktoś może wyjaśnić, dlaczego?
[]
) z definicji ma zero elementów. Co ty widocznie chcą to lista wartości falsy jakNone
,0
lub''
.0
do9
, powinieneś faktycznie użyćfor i in range(0, 10)
, co oznaczafor (int i = 0, i < 10, i++)
.Odpowiedzi:
Nie można przypisać do listy takiej jak
lst[i] = something
, chyba że lista jest już zainicjowana przynajmniej zi+1
elementami. Musisz użyć append, aby dodać elementy na końcu listy.lst.append(something)
.(Możesz użyć notacji przypisania, jeśli korzystasz ze słownika).
Tworzenie pustej listy:
Przypisywanie wartości do istniejącego elementu powyższej listy:
Pamiętaj, że coś podobnego
l[15] = 5
nadal zawiedzie, ponieważ nasza lista zawiera tylko 10 elementów.zakres (x) tworzy listę z [0, 1, 2, ... x-1]
Korzystanie z funkcji do tworzenia listy:
Zrozumienie listy (za pomocą kwadratów, ponieważ dla zakresu nie musisz robić tego wszystkiego, możesz po prostu wrócić
range(0,9)
):źródło
a = [0 for _ in range(10)]
Spróbuj zamiast tego:
Powyższe spowoduje utworzenie listy o rozmiarze 10, w której każda pozycja jest inicjowana
None
. Następnie możesz dodać do niego elementy:Trzeba przyznać, że nie jest to Pythoński sposób robienia rzeczy. Lepiej zrób to:
Lub jeszcze prościej , w Pythonie 2.x możesz to zrobić, aby zainicjować listę z wartościami od 0 do 9:
A w Python 3.x:
źródło
lst = [''] * 10
lublst = [0] * 10
arr = [None for _ in range(10)]
.obecnie akceptowana odpowiedź varunl
Działa dobrze w przypadku typów innych niż odniesienia, takich jak liczby. Niestety, jeśli chcesz utworzyć listę list, napotkasz błędy odwoływania się. Przykład w Python 2.7.6:
Jak widać, każdy element wskazuje ten sam obiekt listy. Aby obejść ten problem, możesz utworzyć metodę, która zainicjuje każdą pozycję do innego odwołania do obiektu.
Prawdopodobnie jest to domyślny, wbudowany w Python sposób (zamiast pisania funkcji), ale nie jestem pewien, co to jest. Byłby szczęśliwy, gdyby został poprawiony!
Edycja: To
[ [] for _ in range(10)]
Przykład:
źródło
append
bardzo często jest gorsze od listowego rozumienia. Możesz utworzyć swoją listę list poprzez[ [] for _ in range(10)]
.Możesz
.append(element)
przejść do listy, nps1.append(i)
. : Obecnie próbujesz uzyskać dostęp do elementu (s1[i]
), który nie istnieje.źródło
Istnieją dwie „szybkie” metody:
Wydaje się, że
[None]*x
jest szybszy:Ale jeśli jesteś zadowolony z zakresu (np.
[0,1,2,3,...,x-1]
), Torange(x)
może być najszybszy:źródło
list(range(n))
zamiast tego, ponieważrange()
nie zwraca listy, ale jest iteratorem, i to nie jest szybsze niż[None] * n
.Dziwię się, że nikt nie sugeruje tego prostego podejścia do tworzenia listy pustych list. To jest stary wątek, ale dodajemy go tylko dla kompletności. Spowoduje to utworzenie listy 10 pustych list
źródło
x = [[]] * 10
polega na tym, że w tym drugim przypadku każdy element na liście wskazuje na obiekt listy SAME . Jeśli więc nie chcesz po prostu 10 kopii tego samego obiektu, użyjrange
wariantu bazowego, ponieważ tworzy on 10 nowych obiektów. Uważam to rozróżnienie za bardzo ważne.(Zostało napisane na podstawie oryginalnej wersji pytania).
Wszystkie listy mogą zawierać dowolną liczbę elementów, z zastrzeżeniem limitu dostępnej pamięci. Jedyny „rozmiar” listy, który ma znaczenie, to liczba aktualnie znajdujących się na niej elementów .
print display s1
nie jest poprawną składnią; na podstawie twojego opisu tego, co widzisz, zakładam, że miałeś na myślidisplay(s1)
i wtedyprint s1
. Aby tos1
zadziałało , musisz wcześniej zdefiniować globalny, aby przejść do funkcji.Dzwonienie
display
nie modyfikuje listy, którą przekazujesz, jak napisano. W kodzie jest napisane: „s1
to nazwa wszystkiego, co zostało przekazane do funkcji; ok, teraz pierwszą rzeczą, którą zrobimy, jest całkowite zapomnienie o tej rzeczy is1
zacznijmy odwoływać się do nowo utworzonegolist
. Teraz zmodyfikujemy tolist
„. Nie ma to wpływu na wartość, którą podałeś.Nie ma powodu, aby podawać tutaj wartość. (Nie ma też żadnego prawdziwego powodu, aby utworzyć funkcję, ale to nie ma sensu.) Chcesz coś „stworzyć”, więc jest to wynik działania Twojej funkcji. Żadne informacje nie są wymagane do stworzenia opisywanej rzeczy, więc nie przekazuj żadnych informacji. Aby uzyskać informacje,
return
to.To dałoby ci coś takiego:
Następnym problemem, na który zwrócisz uwagę, jest fakt, że twoja lista będzie zawierała tylko 9 elementów, ponieważ funkcja pomija punkt końcowy
range
. (Jak zauważa się na marginesie,[]
działa tak samo dobrzelist()
, że średnik jest niepotrzebny,s1
to zła nazwa zmiennej i tylko jeden parametr jest potrzebny,range
jeśli zaczynasz0
.)Nadal jednak brakuje w tym znaku;
range
Nie jest pewne magiczne słowo kluczowe, które jest częścią języka drogafor
idef
są, ale zamiast tego jest to funkcja. I zgadnij, co ta funkcja zwraca? Zgadza się - lista tych liczb całkowitych. Cała funkcja zapada sięa teraz rozumiecie, dlaczego w ogóle nie musimy pisać funkcji;
range
jest już funkcją, której szukamy. Chociaż znowu nie ma potrzeby ani powodu, by „wstępnie przeskalowywać” listę.źródło
Jestem nieco zaskoczony, że najłatwiejszym sposobem utworzenia zainicjowanej listy nie jest żadna z tych odpowiedzi. Wystarczy użyć generatora w
list
funkcji:źródło
range(9)
inlist()
? Nierange(9)
zwraca już listy?range
nie jest listą ani generatorem. Jest to wbudowana niezmienna podklasaSequence
.Jeden prosty sposób na utworzenie macierzy 2D o rozmiarze
n
za pomocą zagnieżdżonych list:źródło
Oto mój kod dla listy 2D w pythonie, który brzmiałby „nie”. wierszy z wejścia:
źródło
Natknąłem się na to pytanie SO, szukając podobnego problemu. Musiałem zbudować tablicę 2D, a następnie zastąpić niektóre elementy każdej listy (w tablicy 2D) elementami ze słownika. Potem natknąłem się na to SO pytanie, które pomogło mi, być może pomoże to innym początkującym się poruszać. Kluczową sztuczką było zainicjowanie tablicy 2D jako tablicy numpy, a następnie użycie
array[i,j]
zamiastarray[i][j]
.Dla odniesienia jest to fragment kodu, w którym musiałem użyć tego:
Teraz wiem, że możemy używać listowania, ale dla uproszczenia używam zagnieżdżonej pętli for. Mam nadzieję, że pomoże to innym osobom, które natkną się na ten post.
źródło
Uczyń go bardziej użytecznym jako funkcja.
źródło
Aby utworzyć listę, użyj następujących nawiasów: „[]”
Aby dodać coś do listy, użyj list.append ()
źródło
Ten kod generuje tablicę zawierającą 10 liczb losowych.
źródło