为什么在python中没有remove()

时间:2014-01-13 04:16:04

标签: python

我使用for循环遍历2D列表并删除所有内容,但只删除了一组重复项:

>>> one = [['red', 'rfg', 'erg', '234', '23423434234', 'F', '2014-01-11'],
    ['red', 'gertus', 'gengie', '234', '234234234234', 'F', '2014-01-11'],
    ['red', 'sdf', 'sdf', '23', '234234234234', 'F', '2014-01-11'],
    ['red', 'rfg', 'erg', '234', '23423434234', 'F', '2014-01-11'],
    ['red', 'gertus', 'gengie', '234', '234234234234', 'F', '2014-01-11'],
    ['red', 'sdf', 'sdf', '23', '234234234234', 'F', '2014-01-11']]
>>> for i in one:
        one.remove(i)
>>> one
[['red', 'rfg', 'erg', '234', '23423434234', 'F', '2014-01-11'],
['red', 'gertus', 'gengie', '234', '234234234234', 'F', '2014-01-11'],
['red', 'sdf', 'sdf', '23', '234234234234', 'F', '2014-01-11']]

为什么remove()只删除一组重复项?我应该做些不同的事情因为有重复吗?

2 个答案:

答案 0 :(得分:2)

您的问题提到重复,这意味着您的问题对于您实际需要的内容有点模棱两可。我认为你的意思是删除列表中的所有元素,因为它们是重复的。 (如果你真的真的打算从一个全新的空列表开始,请参阅@ÓscarLópez的回答。)

如果您只想删除重复项,请考虑以下事项。您在迭代时更改列表,这意味着您将无法删除列表中的所有元素。试试这个:

>>> one = [['red', 'rfg', 'erg', '234', '23423434234', 'F', '2014-01-11'],
['red', 'gertus', 'gengie', '234', '234234234234', 'F', '2014-01-11'],
['red', 'sdf', 'sdf', '23', '234234234234', 'F', '2014-01-11'],
['red', 'rfg', 'erg', '234', '23423434234', 'F', '2014-01-11'],
['red', 'gertus', 'gengie', '234', '234234234234', 'F', '2014-01-11'],
['red', 'sdf', 'sdf', '23', '234234234234', 'F', '2014-01-11']]
>>> [i for i in one if one.count(i) < 2]
[]

这样看:

t = [1, 2, 3, 4]
for i in t:
    t.remove(i)

[1, 2, 3, 4]
 ^
remove t[0], now t == [2, 3, 4]

[2, 3, 4]
    ^
remove t[1], now t == [2, 4]

There is no t[2], so we are done.

[i for i in one if one.count(i) < 2]list comprehension。列表推导创建新列表而不是就地修改第一个列表。从本质上讲,就您的目的而言,这意味着您在尝试修改形状时无需担心列表更改形状。

答案 1 :(得分:2)

这是怎么回事?

one = []

这简单得多......