Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何只打印列表中唯一的项目,那些只出现一次的项目?_Python_Python 3.x - Fatal编程技术网

Python 如何只打印列表中唯一的项目,那些只出现一次的项目?

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,

所以我希望它打印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,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]