#!/usr/bin/python
numbers = [1, 2, 3, 5, 6, 7]
clean = numbers.insert(3, 'four')
print clean
# desire results [1, 2, 3, 'four', 5, 6, 7]
我得到了“None”。我做错了什么?列表的变异方法通常会返回None
,而不是您期望的修改后的列表--这种方法通过原地修改列表来执行其效果,而不是构建并返回一个新列表。 因此,print numbers
而不是print clean
将向您显示已更改的列表。
如果您需要保持numbers
不变,首先要复制它,然后再修改复制品:
clean = list(numbers)
clean.insert(3, 'four')
这将产生您所期望的总体效果:numbers
未改变,clean
是已更改的列表。
insert方法会直接修改列表,且不会返回新的引用。尝试使用以下代码:
>>> numbers = [1, 2, 3, 5, 6, 7]
>>> numbers.insert(3, 'four')
>>> print numbers
[1, 2, 3, 'four', 5, 6, 7]
list.insert()操作符不会返回任何内容,你可能需要使用以下代码:
print numbers
insert会将项目插入给定的列表中。如果打印数字,您将看到结果。insert不会返回新列表。
list(numbers)
来创建clean
,而不直接使用已经是列表类型的numbers
呢? - Francisnumbers
是一个列表,但是除非你复制它,否则你会改变那个列表;而且似乎OP想要在保持原始列表不变的同时创建一个更改后的副本。 - Alex Martelliclean
进行赋值操作就可以直接复制numbers
,因此对clean
的后续操作不会影响到numbers
。 - Francisclean = numbers[:]
和clean = copy(numbers)
的作用是相同的。 - Franciscopy
的全局变量,您还需要非常特殊的导入)。我喜欢通用的方法typename(typeinstance),因为它可以以非常通用的方式工作(list
、dict
、set
和许多其他类型),并且即使实例不完全是您命名的类型,例如list(someset)
也可以轻松创建一个与集合相同的项目列表,没有任何问题或麻烦。 - Alex Martelli