考虑列表a = [“ boo”,[1,2,3]],为什么print(a [0:2] [0:1])会打印['boo']而print(a [0:2] [0:2])打印['boo',[1,2,3]]?

时间:2019-06-11 10:05:24

标签: python list slice

不应该打印(a [0:2] [0:1])打印['boo',[1,2]]? 如果print(a [0:2] [0:2])打印['boo',[1,2,3]]?

3 个答案:

答案 0 :(得分:0)

这里a[0:2]告诉索引范围[1,2)中的所有元素,因此这将创建一个子列表

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

a[0:2][0:1]告诉我们,在子列表中再次具有元素索引范围为[0,1)的子列表,即['boo']

答案 1 :(得分:0)

如果您不进行索引操作,可能会有助于了解原因:

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.    

ac在这种情况下包含相同的数据。

答案 2 :(得分:0)

Python中的列表切片工作方式如下:
当您在列表a[0:2][0:1]上执行a=[“boo”,[1,2,3]]时,首先执行a[0:2],这将为您提供结果列表,其元素的位置从0到1。
=> [“boo”,[1,2,3]]
接下来,[0:1]对该结果执行,它返回list,元素仅在0位置,即[“boo”]

在列表a[0:2][0:2]上执行a=[“boo”,[1,2,3]]时,首先获得位置0和1上的元素=> [“boo”,[1,2,3]],然后再次询问位置0和1上的元素({ {1}}),也就是[0:2]