从python

时间:2016-02-02 16:36:08

标签: python python-2.7

我很惊讶在python中看到以下行为:

>>> x = ['A','F']
>>> print x
['A', 'F']
>>> x.remove('A')
>>> print x
['F']
>>> ['A','F'].remove('A')
>>> print ['A','F'].remove('A')
None

前四个命令显示.remove()的预期操作。但是,在最后两个命令中,似乎remove函数的返回值是None而不是修改后的列表,这对我来说很奇怪。

我想做类似的事情:

list1 = ['a','b','c']
list2 = []
list2.append(list1.remove('a'))
print list2   # returns [None] instead of [['a','b']]

我能做到:

list2.append([x for x in list1 if x != 'a'])

但在我看来,这更难阅读/理解。还有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

删除操作就位 - 它修改了执行操作的列表,而不是返回新列表。没有真正需要返回“修改”列表,因为调用列表删除仍然可用。

预计mockBeanFactory.getType(CLASS_NAME); expectLastCall().andReturn(SOME_CLASS); 打印print list.remove(x)

出了什么问题:

None

您是否只是想减少代码行?

答案 1 :(得分:0)

如果您不喜欢使用追加列表推导,

list2.append([x for x in list1 if x != 'a'])

然后我建议将它分成几行,以便于阅读。

new_list = [x for x in list1 if x != 'a']
list2.append(new_list)

或者,如果您发现列表理解难以理解,您只需复制列表然后删除您不想要的元素。

list1 = ['a', 'b', 'c']
new_list = list(list1) # copy the entire list
new_list.remove('a')
list2.append(a)

答案 2 :(得分:0)

index(item)返回项目出现的列表中的最低索引 remove删除找到的第一个项目,因此我们可以使用slice with index在一行中获得相同结果而不更改list1

list1 = ['a','b','c']
list2 = []

index = list1.index('a')
list2.append(list1[:index] + list1[index+1:])
print list2