Pytanie o del

0

Witam,

jestem początkujący w Pythonie. Nie rozumiem czemu jak mam listę:

a = ['zero','jeden','dwa','trzy','cztery']

i jak dam:

del a[2:4]

to zostaje wywalony nie tylko element 3 (jak powinien) ale też 2 czyli w tym przypadku 'dwa'? Trochę to nie logiczne jak dla mnie bo tym poleceniem chce usunąć wszystko między 2 a 4 elementem, czyli 'trzy' a mi wywala 'dwa' i 'trzy'.

0

Używasz operatora [:], on zwraca wszystko od pierwszego indeksu włącznie i mniejsze od ostatniego(indeksując od zera, oczywiście), np:

>>> l1 = [1, 2 ,3, 4]
>>> l1[2:4]
[3, 4]

A czemu tak? Tako rzecze Dijkstra:):
https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html

0
lion137 napisał(a):

Używasz operatora [:], on zwraca wszystko od pierwszego indeksu włącznie i mniejsze od ostatniego(indeksując od zera, oczywiście), np:

>>> l1 = [1, 2 ,3, 4]
>>> l1[2:4]
[3, 4]

A czemu tak? Tako rzecze Dijkstra:):
https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html

Tzn. rozumiem dlaczego indeksacja jest od 0 ale nie rozumiem, dlaczego jak daje del a[2:4] to wywala mi nie tylko 3 indeks ale też 2. Dla mojej listy polecenie

a[2:4]
daje
['dwa','trzy']

Co jest dla mnie troche nielogiczne bo [2:4] rozumiem jako wszystko między 2 a 4 indeksem, czyli w tym przypadku 'trzy'. Dlaczego dołącza jeszcze 2 indeks? Specjalnie utworzyłem listę nazywającą indeksy od 0.

1

Bo lista[2:4] zwraca nie to co jest między indeksami 2 i 4, ale większe lub równe od 2 - tego [indeksu] i mniejsze od 4.

2

Bo tak działa ta instrukcja. Lewy indeks jest inclusive bo dzięki temu mozesz zrobić tab[0:n] żeby uwzględnić pierwszy element. Gdyby było tak jak mówisz, to musiałbyś robić tab[-1:n] żeby uwzględnić indeks 0, a fakt że python wspiera ujemne indeksy sprawiłby że ich używanie byłoby totalnie nielogiczne w takie sytuacji.

0

Nie wiem, czy to pomoże ale ja [2:4] zrozumiałem jako <2,4) tak jak przy zbiorach w matmie .

0
>>> a = ['zero','jeden','dwa','trzy','cztery']
>>> a[2:4]
['dwa', 'trzy']
>>> 

Tak działa interpreter. Logiczne, czy nie, deal with it...

for (int i = 2; i < 4; i++)

0

Moim zdaniem, różnica indeksów (4 - 2 = 2) powinna być równa ilości pobieranych elementów. W konsekwencji a[2:4] powinno oznaczać listę dwuelementową: 2 i 3 lub 3 i 4. @Shalom podał argument dlaczego powinno być 2 i 3.

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