我想删除重复的从列表(没有for循环)
在这里我有一个列表我想删除重复的从列表(没有for循环)
a = [1, 2, 1, 4, 5, 7, 8, 4, 6]
现在我想下一输出,但没有for循环。 从列表中删除所有重复项。
[2, 5, 7, 8, 6]
输出列表仅包含单出现次数
可以为了维持原来的顺序使用Counter
和条件列表理解或filter
:
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
“without for loop”... – efkin
@efkin理解不是for循环,只是因为有'for'。 – schwobaseggl
对不起...我认为这是一个类似的实施...我删除了我的投票。你知道我在哪里可以阅读关于它的一些规范吗? – efkin
考虑:a = [1, 2, 1, 4, 5, 7, 8, 4, 6]
One liner:
b = [x for x in a if a.count(x) == 1]
@Rawing,谢谢,修正! –
这是一个非常简单和低效的实现。
我们使用一个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 [index]'是否不在'result'中,以避免再次计数你知道的元素是唯一的......对于大型'a's和少量唯一值 - 可能值得... –
可能是一个想法。这只是一个额外的代码行。另一方面,没有人会在生产中使用它。扔掉这个奇怪的克制“没有for循环”,我相信你会找到更好的解决方案。 – Matthias
是的,只要在结果或a.count(a [index])== 1'中做出'如果不是[索引]'那行就行了 - 但是,在任何非教师认为它是一个好的 - 制约约束的情况下你会使用Counter或类似的。 –
'set(a)'将产生一个不重复的结果作为一个set对象。 – swatchai
@swatchai ...并搞乱了原来的秩序。 – schwobaseggl
输出的标准是什么。它是否必须是确切的输出?换句话说,当你找到重复的东西时,你是否希望删除第一个匹配项?或者你想要删除第二个?因为没有你提供的细节,list(set(your_list))可能是一个有效的解决方案。但是你的问题很模糊,在这里仍然缺少你自己的代码。 – idjaw