好吧,我可以在Python上轻松使用这段代码:
>>>> a = range(5, 10)
>>>> b = range(15, 20)
>>>> a.extend(b)
>>>> a
[5, 6, 7, 8, 9, 15, 16, 17, 18, 19]
我也可以使用此方法,而不使用b
:
>>>> a = range(5, 10)
>>>> a.extend(range(15, 20))
>>>> a
[5, 6, 7, 8, 9, 15, 16, 17, 18, 19]
但我无法弄清楚为什么在这种情况下不会发生同样的事情:
>>>> [5, 6, 7, 8, 9].extend(range(15, 20))
>>>>
a
不应该与上面的列表相同吗?我只看到了我对这个状态进行硬编码的不同之处。我真的可以理解硬编码列表不能修改而不是变量或其他东西但是...
>>>> [5, 6, 7, 8, 9][2]
7
这令我感到惊讶。更奇怪的是:
>>>> [5, 6, 7, 8, 7].count(7)
2
>>>> [5, 6, 7, 8, 7].index(8)
3
为什么某些列表方法可以在硬编码/非变量列表中工作,而其他人可以吗?
我并没有真正使用它,这更多的是个人知识和对语言的理解而不是有用。
答案 0 :(得分:6)
extend
未返回值。因此,打印a.extend(b)
将为None
。因此,如果您有a = [5, 6, 7, 8, 9].extend(range(15, 20))
并打印a
,则会显示None
。解决这个问题的方法是连接列表a = [5, 6, 7, 8, 9] + range(15, 20)
[5, 6, 7, 8, 9][2]
- 一切都是应该的,因为它从0开始计算元素。它不是修改列表,它只是从列表中返回某个元素。
[5, 6, 7, 8, 7].count(7)
和[5, 6, 7, 8, 7].index(8)
显示预期的输出。第一个是列表中出现7的次数,第二个是数字8的索引(再次,计数从0开始)。
因此,总而言之,使用硬编码列表的行为与您生成的所有示例中的预期一致。