为什么remove()在python中不起作用

2024-10-02 12:38:53 发布

您现在位置: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()只删除一组重复项?我应该做一些不同的事情,因为有重复?你知道吗


Tags: in内容列表forred事情oneremove
2条回答

你的问题提到了重复,这意味着你的问题是有点含糊不清,关于你实际上在寻找什么。我想您的意思是删除列表中的所有元素,因为它们是重复的。(如果你真的,真的想从一个全新的空名单开始,请看@Óscar Ló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。列表理解创建一个新列表,而不是修改第一个列表。本质上,出于您在这里的目的,这意味着您不必担心列表在试图修改时会改变形状。你知道吗

这个怎么样?你知道吗

one = []

那就简单多了。。。你知道吗

相关问题 更多 >

    热门问题