Analizuję kod w Pythonie i nie wiem co
pop = population[:]
znaczy. Czy jest to coś w rodzaju list tablic w Javie, czy też jak tablica dwuwymiarowa?
Analizuję kod w Pythonie i nie wiem co
pop = population[:]
znaczy. Czy jest to coś w rodzaju list tablic w Javie, czy też jak tablica dwuwymiarowa?
lists zapewniają cleari copymetody, równoważne wykonaniu del mylist[:]lub mylist[:]odpowiednio. Nie są one ogólnie wymagane w przypadku sekwencji podlegających zmianom, więc jeśli możesz otrzymać dowolną sekwencję podlegającą mutacji, powinieneś trzymać się operacji opartych na wycinkach, ale nazwane metody są przynajmniej dostępne list.
Odpowiedzi:
Jest to przykład notacji plastra, a jego działanie zależy od typu population. Jeśli populationjest listą, ta linia utworzy płytką kopię listy. Dla obiektu typu tuplelub a strnie zrobi nic (linia zrobi to samo bez [:]), a dla (powiedzmy) tablicy NumPy, utworzy nowy widok na te same dane.
l.copy()jest bardziej czytelny, ale nie zadziała.
list(l)zawsze działa, jest bardziej czytelny i gwarantuje, że zwróci kopię nawet z czymś takim jaknumpy.array
list.clear(). Jednak minie trochę czasu, zanim doprowadzi to do znacznej redukcji tego rodzaju pytań dotyczących SO. :)
A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)], prawie zawsze wolę numpy.rollaxis(A, axis, 0)[k]. Ogólnie rzadko spotykam przypadek użycia, w którym trzeba bezpośrednio tworzyć slice()obiekty. Jeśli mimo wszystko ich potrzebujesz, NumPy zapewnia s_pomocnika jako alternatywny sposób ich tworzenia.
Warto również wiedzieć, że wycinek listy generalnie tworzy kopię części listy. Np. Zwróci population[2:4]listę zawierającą populację [2] i populację [3] (krojenie jest wyłączne dla praw). Pomijając lewy i prawy indeks, ponieważ population[:]domyślnie mają wartość 0 i długość (populacja), wybierając w ten sposób całą listę. Dlatego jest to powszechny idiom, w którym można skopiować listę.
cóż ... to naprawdę zależy od kontekstu. Ostatecznie przechodzi sliceobiekt ( slice(None,None,None)) oznacza jedną z następujących metod: __getitem__, __setitem__i __delitem__. (Właściwie, jeśli obiekt ma __getslice__, to zostanie użyte zamiast __getitem__, ale jest teraz przestarzałe i nie powinno być używane).
Obiekty mogą robić z plastrem, co chcą.
W kontekście:
x = obj[:]
Spowoduje to wywołanie obj.__getitem__z przekazanym obiektem plasterka. W rzeczywistości jest to całkowicie równoważne z:
x = obj[slice(None,None,None)]
(chociaż ta pierwsza jest prawdopodobnie bardziej wydajna, ponieważ nie musi szukać slicekonstruktora - wszystko odbywa się w kodzie bajtowym).
W przypadku większości obiektów jest to sposób na utworzenie płytkiej kopii części sekwencji.
Kolejny:
x[:] = obj
Jest sposobem na ustawienie elementów (wywołuje __setitem__) na podstawie obj.
i myślę, że prawdopodobnie możesz się domyślić, co:
del x[:]
dzwoni ;-).
Możesz również przekazać różne plasterki:
x[1:4]
konstrukcje slice(1,4,None)
x[::-1]
konstrukcje slice(None,None,-1)i tak dalej. Dalsza lektura: Wyjaśnij notację wycinków w Pythonie
Tworzy kopię listy, zamiast przypisywać nową nazwę do już istniejącej listy.
[:]
używane do ogranicznika lub dzielenia w tablicy, hash
np:
[1: 5] do wyświetlania wartości od 1 włącznie do 5 wyłącznych tj. 1-4
[start: end]
zasadniczo używane w tablicy do krojenia, rozumiemy nawias akceptuje zmienną, która oznacza wartość lub klawisz do wyświetlenia, a „:” służy do ograniczania lub dzielenia całej tablicy na pakiety.
a[1:5]zwraca elementy 1-4, a nie 2-4.