2013-08-27 91 views
1

好Python列表,我可以很容易地在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 

为什么一些列表方法上的硬编码/不IN-A-变量列表的工作,而其他人可以吗?

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

回答

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开始计数)。

因此,硬编码列表的所有使用行为与您所生成的所有示例中的预期行为相同。

+0

嗯我明白。是否有任何理由为'a.extend(b)'除了扩展它外不返回结果列表?例如,我觉得使用'a = [5,6,7,8,9] .extend(范围(15,20))'很有用。 – ranisalt

+1

@ranisalt [5,6,7,8,9] +范围(15,20)将做你想做的事 – sashkello

+1

它不返回任何东西,因为它是列表上的一个操作。当您执行'a.extend'时,您将元素附加到'a'。从概念上讲,让这个操作做两件事会很糟糕 - 返回扩展列表并扩展传递的列表。 – sashkello