如何仅打印列表中的唯一项目,这些项目只发生一次?

时间:2018-06-17 22:56:48

标签: python python-3.x

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

3 个答案:

答案 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]