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))
所以我希望它打印1,2,3,5而不是1,2,3,4,5,6
答案 0 :(得分:6)
collections.Counter()
是计算事物的好方法,例如:
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]
在3.6中,这将按照预期的顺序Counter()
不做任何订单保证,如果您需要的顺序与original_list
相同,那么您可以创建{{ 1}}并用它来测试唯一性,例如:
set
答案 1 :(得分:2)
print([x for x in list_1 if list_1.count(x) == 1])
答案 2 :(得分:1)
虽然在这里使用collections.Counter()
是最好的方法,但您可以使用的其他选项是使用collections.defaultdict()
进行计数:
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]
如果您想保证订单,可以使用collections.OrderedDict()
:
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]