答案 0 :(得分:12)
从列表中排除项目多次出现:
d = [x for x in d if d.count(x) == 1]
对于上面提供的示例,d将绑定到空列表。
其他人已经发布了删除重复项的良好解决方案。
答案 1 :(得分:6)
转换为集合然后再返回:
list(set(d))
如果订单很重要,您可以通过记住原始索引的字典传递值。这种方法虽然可以表达为单个表达式,但要复杂得多:
[x for (i, x) in sorted((i, x) for (x, i) in dict((x, i) for (i, x) in reversed(list(enumerate(d)))).iteritems())]
当然,您不必使用理解。对于这个问题,可以使用一个相当简单的解决方案:
a = []
for x in d:
if x not in a:
a.append(x)
请注意,两个保留顺序的解决方案都假设您希望保留每个重复元素的第一个匹配项。
答案 2 :(得分:0)
假设您有一个名为Words
的列表和一个列表UniqueWords
,在Words
上启动一个循环,在每次迭代时检查列表UniqueWords
是否包含迭代元素,如果是,则continue
,如果没有,则将其添加到UniqueWords。最后,您将拥有一个没有重复的列表。你可以做的另一种方法是在循环中循环,而不是添加你删除它,如果它被多次发现:)
我敢打赌,有更有效的方式。
答案 3 :(得分:0)
如果您不担心订单,d = list(set(d)))
。
答案 4 :(得分:0)
如果订单有问题,请查看itertools recpies文档中的unique_everseen
功能。它提供了一个相对干净的基于迭代器的解决方案。
如果顺序无关紧要,请转换为套装。
答案 5 :(得分:-1)
如果您不应该这样做,请务必阅读the python docs on itertools,尤其是产品(),排列()和组合()。