Python列表没有分配变量

时间:2013-08-27 04:37:01

标签: python list methods hardcode

好吧,我可以在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

为什么某些列表方法可以在硬编码/非变量列表中工作,而其他人可以吗?

我并没有真正使用它,这更多的是个人知识和对语言的理解而不是有用。

1 个答案:

答案 0 :(得分:6)

  1. 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)

  2. [5, 6, 7, 8, 9][2] - 一切都是应该的,因为它从0开始计算元素。它不是修改列表,它只是从列表中返回某个元素。

  3. [5, 6, 7, 8, 7].count(7)[5, 6, 7, 8, 7].index(8)显示预期的输出。第一个是列表中出现7的次数,第二个是数字8的索引(再次,计数从0开始)。

  4. 因此,总而言之,使用硬编码列表的行为与您生成的所有示例中的预期一致。