Python 我想从列表中删除重复项(不带for循环)

Python 我想从列表中删除重复项(不带for循环),python,Python,这是我的清单 a = [1, 2, 1, 4, 5, 7, 8, 4, 6] 现在我想要一个如下输出,但没有for循环。 从列表中删除所有副本 [2, 5, 7, 8, 6] 输出列表仅包含单个出现编号您可以使用和条件列表理解或过滤器来保持原始顺序: from collections import Counter c = Counter(a) clean_a = filter(lambda x: c[x] == 1, a) # avoids 'for' ;-) # clean_a = li

这是我的清单

a = [1, 2, 1, 4, 5, 7, 8, 4, 6]
现在我想要一个如下输出,但没有for循环。 从列表中删除所有副本

[2, 5, 7, 8, 6]
输出列表仅包含单个出现编号

您可以使用和条件列表理解或
过滤器
来保持原始顺序:

from collections import Counter
c = Counter(a)
clean_a = filter(lambda x: c[x] == 1, a)  # avoids 'for' ;-)
# clean_a = list(filter(lambda x: c[x] == 1, a))  # Python3, if you need a list
# clean_a = [x for x in a if c[a] == 1]  # would be my choice

给定:
a=[1,2,1,4,5,7,8,4,6]

一行:

b = [x for x in a if a.count(x) == 1]

这是一个非常简单且效率低下的实现

我们使用
while
循环访问
a
的每个元素。在循环中,我们检查当前元素在列表中是否只出现一次。如果是,我们将其添加到新列表中

a = [1, 2, 1, 4, 5, 7, 8, 4, 6]
index = 0
result = []
while index < len(a):
    if a.count(a[index]) == 1:
        result.append(a[index])
    index += 1

print(result)
a=[1,2,1,4,5,7,8,4,6]
索引=0
结果=[]
当指数
set(a)
将生成一个不重复的结果作为set对象。@swatchai。。。把原来的顺序弄乱了输出的标准是什么。它必须是精确的输出吗?换句话说,您是否希望在找到重复项时删除第一个匹配项?或者你想移除第二个?因为,如果没有您提供的详细信息,
list(set(your_list))
可能是一个有效的解决方案。但是你的问题很模糊,仍然缺少你自己的代码努力。@efkin理解不是for循环,只是因为有一个
for
@DanielTrugman:啊,来吧
collections
是Python标准库的一部分。@DanielTrugman,但是,这非常简洁,并且将优于所有建议的解决方案,包括重复调用
count()
@DanielTrugman您的解决方案是
O(n^2)
@DanielTrugman,但这仍然不是O(n)。。。您正在扫描
a
一次以进行唯一化,然后扫描N次以查找
。计算
有多少个唯一值…想知道是否值得先检查
a[索引]
是否不在
结果中,以避免再次计算已知唯一的元素。。。对于大的
a
s和少量的唯一值-可能是值得的…可能是一个想法。这只是一行额外的代码。另一方面,没有人会在生产中使用它。扔掉这个奇怪的约束“没有for循环”,我相信你会找到更好的解决方案。是的,如果不是结果中的[index]或a.count(a[index])==1,你可以只做一行
——但是,是的,在任何非教师认为它是一个很好的约束的场景中,你都会使用计数器或类似的工具。