Python 如何只打印列表中唯一的项目,那些只出现一次的项目?
所以我希望它打印1,2,3,5而不是1,2,3,4,5,6,这是计算事物的好方法,例如:Python 如何只打印列表中唯一的项目,那些只出现一次的项目?,python,python-3.x,Python,Python 3.x,所以我希望它打印1,2,3,5而不是1,2,3,4,5,6,这是计算事物的好方法,例如: def get_distinct(original_list): distinct_list = [] for i in original_list: if i not in distinct_list: distinct_list.append(each) return distinct_list list_1 = [1,2,3,4,4,
def get_distinct(original_list):
distinct_list = []
for i in original_list:
if i not in distinct_list:
distinct_list.append(each)
return distinct_list
list_1 = [1,2,3,4,4,5,6,6]
print(get_distinct(list_1))
print([x for x in list_1 if list_1.count(x) == 1])
虽然在3.6中,这将是预期的顺序Counter()
不保证任何顺序,但如果您需要与original_list
中相同的顺序,则可以创建一个set
并使用它来测试唯一性,例如:
from collections import Counter
def get_distinct(original_list):
return [k for k, v in Counter(original_list).items() if v == 1]
In []:
list_1 = [1,2,3,4,4,5,6,6]
get_distinct(list_1)
Out[]:
[1, 2, 3, 5]
虽然在这里使用是最好的方法,但您可以使用的另一个选项是使用:
其工作原理如下:
from collections import defaultdict
def get_distinct(original_list):
counts = defaultdict(int)
for item in original_list:
counts[item] += 1
return [k for k, v in counts.items() if v == 1]
如果您想保证订单,您可以使用:
注意:以这种方式使用
count()
不是很有效-这是O(n^2)
。但是,对于短列表,这不会是一个问题。很好,但这会更具可读性:print([item for item,count in Counter(list_1)。items()如果count==1])
我希望使用一个函数来执行此操作。这与Counter()有一个类似的问题,但不能保证按顺序执行,不确定这对行动是否重要。@AChampion,是的,我同意。在这种情况下,我想你可以求助于OrderedDict
。你也可以做counts[item]=counts.get(item,0)+1
来避免if
的情况。@AChampion啊,是的,忘记了dict.get()
,我会更新我的答案。
from collections import defaultdict
def get_distinct(original_list):
counts = defaultdict(int)
for item in original_list:
counts[item] += 1
return [k for k, v in counts.items() if v == 1]
>>> get_distinct([1,2,3,4,4,5,6,6])
[1, 2, 3, 5]
from collections import OrderedDict
def get_distinct(original_list):
counts = OrderedDict()
for item in original_list:
counts[item] = counts.get(item, 0) + 1
return [k for k, v in counts.items() if v == 1]