Рассматривая список a = ["boo", [1,2,3]], почему print (a [0: 2] [0: 1]) печатает ['boo'], тогда как print (a [0: 2][0: 2]) печатает ['boo', [1,2,3]]? - PullRequest
0 голосов
/ 11 июня 2019

Не следует печатать (a [0: 2] [0: 1]) print ['boo', [1,2]]? если print (a [0: 2] [0: 2]) печатает ['boo', [1,2,3]]?

Ответы [ 3 ]

0 голосов
/ 11 июня 2019

Если вы отменяете операции индексирования, это может помочь понять, почему:

a = ['boo', [1, 2, 3]] 
b = a[0:2] # this creates a new list from `a` with elements 0 and 1
b[0] # 'boo'
b[1] # [1, 2, 3]
f = b[0:1] # before this, b is the same as ['boo', [1, 2, 3]]
           # retrieving only the first element [0, 1], returns a new list:
f[0] # 'boo'
f # ['foo'] (a list with just 'foo')

При создании списка с тем же содержимым, что и список перед ним ([0:2]), получается другой результат:

c = a[0:2] # this creates a new list from `a` with elements 0 and 1
c[0] # 'boo'
c[1] # [1, 2, 3]
c[0:2] # the same as a[0:2][0:2], which is the same as just `c` as well.    

a и c в этом случае содержат одинаковые данные.

0 голосов
/ 11 июня 2019

Способ среза списка в Python работает следующим образом:
Когда вы выполняете a[0:2][0:1] в списке a=[“boo”,[1,2,3]], сначала выполняется a[0:2], который дает вам список результатов с элементами от 0 до 1
=> [“boo”,[1,2,3]].
Затем [0:1] выполняется для этого результата, и он возвращает список только с элементом в позиции 0, который равен [“boo”].

При выполнении a[0:2][0:2] в списке a=[“boo”,[1,2,3]] сначала вы получаете элементы в позициях 0 и 1 => [“boo”,[1,2,3]], а затем снова запрашиваете элементы в позициях 0 и 1 ([0:2]), и это точно [“boo”,[1,2,3]].

0 голосов
/ 11 июня 2019

здесь a[0:2] сообщает всем элементам в индексном диапазоне [1,2), поэтому это создаст подсписок

sublist = ['boo', [1, 2, 3]] 

и

a[0:2][0:1] это говорит о том, что в подсписке снова подсписок, имеющий диапазон индекса элемента в форме [0,1), т. Е. ['boo'].

...