我有一个原始列表,其内容在另一个函数中确定,我希望将数字0和5添加到列表中以形成一个扩展列表,而不会损坏原始列表。在这个应用程序中,我知道0和5永远不会是原始列表的一部分,所以我不担心重复。我也不关心秩序或要素。
-
由于另一个问题中讨论的原因,以下内容不起作用,因为它破坏了原始列表:
>>> orig = [1,6] >>> extended = orig >>> extended.extend([0,5]) >>> extended [1, 6, 0, 5] >>> orig [1, 6, 0, 5]
-
提出的解决方案之一是使用内置的list()函数。这产生了所需的结果:
>>> orig = [1,6] >>> extended = list(orig) >>> extended.extend([0,5]) >>> extended [1, 6, 0, 5] >>> orig [1, 6]
-
然后我尝试将2的第2行和第3行合并。这会产生一个"无"的结果,并且只有当你打印它的时候
>>> orig = [1,6] >>> extended = list(orig).extend([0,5]) >>> extended >>> print extended None
-
我最终编码的是这个,它比以前的任何尝试都要整洁,使用串联。
>>> orig = [1,6] >>> extended = orig + [0,5] >>> extended [1, 6, 0, 5] >>> orig [1, 6]
但我的问题是,为什么示例3不起作用?(对我来说)它看起来很合理,而且没有返回错误。它只会产生"无"。
我使用的是Python 2.7.8。
extend
是一个就地操作,与list.sort
、list.append
一样,它会影响原始列表。所有这些方法都返回None
,因为它们不返回任何值,所以当您返回extended = list(orig).extend([0,5])
时,您只看到extend的返回值。
In [6]: l = [1,2,3]
In [7]: e = l.extend([4,5])
In [8]: print e
None
In [9]: l = [1,2,3]
In [10]: a = l.append(6)
In [11]: print a
None