尝试在Python中扩展列表时键入错误

尝试在Python中扩展列表时键入错误,python,list,append,typeerror,extend,Python,List,Append,Typeerror,Extend,我需要理解为什么: years = range(2010,2016) years.append(0) 是可能的,返回: [2010,2011,2012,2013,2014,2015,0] 及 或 不起作用 我知道这是我收到的消息中的类型错误。但是我想在这后面有更多的解释。您正在存储list.append()或list.extend()方法的结果;这两种方法都会就地更改列表并返回None。它们不会再次返回列表对象 不要存储None结果;存储范围()结果,然后扩展或追加。或者,使用串联: yea

我需要理解为什么:

years = range(2010,2016)
years.append(0)
是可能的,返回:

[2010,2011,2012,2013,2014,2015,0]

不起作用


我知道这是我收到的消息中的类型错误。但是我想在这后面有更多的解释。

您正在存储
list.append()或
list.extend()方法的结果;这两种方法都会就地更改列表并返回
None
。它们不会再次返回列表对象

不要存储
None
结果;存储
范围()
结果,然后扩展或追加。或者,使用串联:

years = range(2010, 2016) + [0]
years = [0] + range(2010, 2016)
注意,我假设您使用的是Python2(否则您的第一个示例将无法工作)。在Python 3中,
range()
不生成列表;您必须使用
list()
函数将其转换为:

years = list(range(2010, 2016)) + [0]
years = [0] + list(range(2010, 2016))

append
extend
列表上的操作不会返回任何内容(只返回
None
)。这就是为什么
years
不是您期望的列表。

在Python 3中
range
返回range类的实例,而不是列表。如果要操作
范围的结果,需要一个列表,因此:

years = list(range(2010,2016)) 
years.append(2016)
最后,(与上面的append类似)extend对调用它的列表进行操作,而不是返回新列表,因此:

years = list(range(2010,2016))
years.extend( list(range(2016,2020)))
*虽然Python2的
range
函数确实返回一个列表,但上述代码在Python2中仍然可以正常工作*


希望这有帮助

您的最后一行基本上是这样做的:设置一个匿名列表
[0]
,然后
扩展()
该列表以及
范围()
的结果,在
年内存储
扩展()
的结果(即
),然后扔掉该列表,因为它从未绑定到名称。您应该真正显示您得到的实际错误。这两个示例都会产生
TypeError
(使用Python3),或者两者都不会(Python2),但最后将
年份设置为
None
。这两种情况中哪一种会发生?你能提供完整的回溯吗?@MartijnPieters:我已经调整了我的解释以反映你的上述观点-请重新评估,因为我认为你已经阅读了我的答案的旧版本-我没有建议
years=list(range(2010,2016))。追加(0)
是正确的。@MartijnPieters:请重新阅读我的答案-我没有存储其中任何一个的值。我的道歉;我在手机上看到了你答案中的代码,这让它看起来像你做的一样(线条看起来是环绕的,而不是分开的)。非常感谢你的解释。
years = list(range(2010,2016)) 
years.append(2016)
years = list(range(2010,2016))
years.extend( list(range(2016,2020)))