如何在Python列表中删除所有特定值的出现?

10 浏览
0 Comments

如何在Python列表中删除所有特定值的出现?

如何从以下列表中删除333的两个出现次数?\n

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]

\n我在Python 2.7命令行中输入了以下脚本\n

for num in a:
    if num == 333:
       a.remove(num)

\n但只删除了第一次出现的333\n

 >>> a
 [-1, 1, 66.25, 333, 1234.5]

\n如何删除所有出现的相同元素?\n我想能够指定要删除所有出现次数的元素,并通过相同的名称或其他名称获得一个新的列表。

0
0 Comments

原因:问题的出现是因为问题提出者想要在Python列表中删除所有特定值的出现。

解决方法:可以使用下面的代码来删除列表中所有出现的特定值。

a = [-1, 1, 66.25, 333, 333, 1234.5]
a = [el for el, count in collections.Counter(a).items() if count == 1]

这将删除列表中所有出现次数多于一次的元素。

其他答案只删除了333的出现,而没有提供通用的解决方法。

问题描述中提到了如何删除列表中所有相同元素的出现。但是问题提出者在代码中使用了`if num == 333`。我会使用`set`或`itertools`中的`uniqueverseen recipe`来替代`collections.Counter`,因为这样可以保持元素的顺序。

问题的标题准确地表达了我要询问的内容,在列表中有两个相同元素的情况下,我使用333只是为了测试我的方法是否有效。在这里的描述中,[Python官方文档](http://docs.python.org/2/tutorial/datastructures.html)中提到,`list.remove(x)`只会删除第一个遇到的元素。我以为使用`remove()`会删除一个元素,并且在下一次循环迭代中会遇到下一个相同元素并将其删除。

问题的解决方法如下所示,只会执行你要求的操作,即删除所有相同元素的出现。

文章输出:

问题的出现是因为问题提出者想要在Python列表中删除所有特定值的出现。可以使用以下代码来删除列表中所有出现的特定值:

a = [-1, 1, 66.25, 333, 333, 1234.5]
a = [el for el, count in collections.Counter(a).items() if count == 1]

这将删除列表中所有出现次数多于一次的元素。其他答案只删除了333的出现,而没有提供通用的解决方法。

问题描述中提到了如何删除列表中所有相同元素的出现。但是问题提出者在代码中使用了`if num == 333`。我会使用`set`或`itertools`中的`uniqueverseen recipe`来替代`collections.Counter`,因为这样可以保持元素的顺序。

问题的标题准确地表达了我要询问的内容,在列表中有两个相同元素的情况下,我使用333只是为了测试我的方法是否有效。在这里的描述中,Python官方文档中提到,`list.remove(x)`只会删除第一个遇到的元素。我以为使用`remove()`会删除一个元素,并且在下一次循环迭代中会遇到下一个相同元素并将其删除。

问题的解决方法如下所示,只会执行你要求的操作,即删除所有相同元素的出现:

a = [-1, 1, 66.25, 333, 333, 1234.5]
a = [el for el, count in collections.Counter(a).items() if count == 1]

0
0 Comments

Python中有多种方法可以从列表中移除特定值的所有出现。下面将介绍两种解决方法。

首先,可以通过重新分配列表的切片来移除元素。这会在内存中创建一个新的列表,但通常是可接受的。以下是一个示例:

a = [-1, 1, 66.25, 333, 333, 1234.5]
a[:] = [item for item in a if item != 333]

这种方法的优点是它会首先移除最后的元素(在CPython中更快)。但如果不想创建新的列表,可以使用下面的方法,它会在列表中反向遍历索引并删除对应的元素:

a = [-1, 1, 66.25, 333, 333, 1234.5]
for i in range(len(a) - 1, -1, -1):
    if a[i] == 333:
        del a[i]

需要注意的是,如果要从列表的中间或开头移除元素,这两种方法都不是最优的。无论使用`del list[index]`还是`list.remove`,如果列表很大并且需要移除多个元素,Python就需要频繁调整列表的大小。在这种情况下,建议使用列表推导式来创建一个新的列表。

还有一个值得注意的问题是,在第二行的`a`后面加上`[:]`是否有必要?测试发现,去掉`[:]`并不会产生任何区别。实际上,这是有区别的。问题要求从列表中移除元素,去掉`[:]`会重新赋值给一个新的变量,而不是原地修改列表。如果列表在其他地方被引用,这就产生了重要的区别。

0
0 Comments

如何在Python列表中删除所有特定值的出现?

问题的出现原因是因为循环遍历列表时,同时修改列表会导致一些项被遗漏。

解决方法是使用列表推导式或集合。使用列表推导式可以创建一个新的列表,其中不包含特定值的项。使用集合可以获取列表中唯一的项。

具体的解决方法如下:

1. 使用列表推导式:

a = [-1, 1, 66.25, 333, 333, 1234.5]
[item for item in a if item != 333]

这将返回一个新的列表,其中不包含值为333的项。

2. 使用集合:

seen = set()
a = [-1, 1, 66.25, 333, 333, 1234.5]
[item for item in a if item not in seen and not seen.add(item)]

这将返回一个新的列表,其中包含列表中的唯一项。如果不需要保持顺序,可以使用`list(set(a))`。

3. 如果不想创建新的列表,可以使用以下方法来直接修改原列表:

while 333 in a:
    a.remove(333)

这是一种线性时间复杂度的方法,不需要额外的空间。另一种方法是使用`for _ in range(a.count(333)): a.remove(333)`,稍微更高效一些。

可以通过列表推导式或集合来删除列表中特定值的所有出现。使用列表推导式可以创建一个新的列表,其中不包含特定值的项。使用集合可以获取列表中唯一的项。如果需要在原列表上进行修改,则可以使用`while`循环或`for`循环配合`remove()`方法。

0