我正在尝试从列表中删除相同的数字。因此,如果我有1,2,3,4,5,3并且我告诉它删除3,它将只删除第一个(使用.remove)给我1,2,4,5,3。我现在知道.remove只能删除第一个,所以我的问题是,我可以使用其他什么方法?我已经尝试过.pop和del但似乎都没有做过所有这些(尽管我本来可以做错了)。我本来只是创建了一个没有重复数字的新列表,但是它意味着要通过我的老师驱动程序,所以我不能只编造一个新的列表(或者至少,我假设有更简单的方法?)如果它帮助,到目前为止,这是代码的一部分:
def remove_element(self,integer):
self.integer = integer
self.members.remove(integer)
答案 0 :(得分:2)
您可以使用内置的filter
,而不必为其编写方法:
>>> l = [1, 2, 3, 4, 5, 3]
>>> filter(lambda f: f != 3, l)
[1, 2, 4, 5]
在上面的代码中,我们定义了一个lambda函数lambda f: f != 3
,它测试列表中的元素是否为3。在您的情况下,您可以使用self.integer
替换3
。
如果您不熟悉lambda函数,lambda f: f != 3
等同于函数foo
:
>>> def foo(f):
... return f != 3
答案 1 :(得分:1)
您可以使用list comprehension:
>>> l = [1,2,3,4,5,3]
>>>
>>> [i for i in l if i != 3]
[1, 2, 4, 5]
请记住,这实际上并不会修改l
,而是创建新列表,因此请务必将l
重新分配给理解结果。
答案 2 :(得分:1)
[x for x in a_list if x != integer]
所以在你的情况下,它将是:
def remove_element(self,integer):
self.integer = integer
self.members = [elem for elem in self.members if elem != integer]
答案 3 :(得分:1)
def without_element(l, element):
return [item for item in l if item != element]
def remove_all(l, element):
try:
while True:
l.remove(element)
except ValueError:
pass
第一个函数创建一个新列表,不包含您不想要的任何元素副本。第二个从现有列表中删除所有副本。没有“删除所有副本”的方法;通常,如果你想要,你使用错误的数据结构。你确定你应该使用清单吗?
答案 4 :(得分:0)
def remove_element(self,integer):
while integer in self.members:
self.members.remove(integer)