如何从列表中获取不重复的值?

5
我试图遍历一个文本文件中的一列,每个条目只有三个选择“A,B和C”。
我想要识别不同选择类型的数量(另一个文本文件包含A、B、C和D),但如果我通过100个条目中的每个元素进行迭代,并将其添加到列表中,我将有多个重复项。例如,如果我这样做,列表可能会读取[A,A,A,B,C,C,D,D,D,B,B...],但我希望删除额外的条目,并且只显示我的列表中可区分的类型[A,B,C,D],而不管有多少条目。
您有什么想法可以将具有许多常见元素的列表减少为仅显示不同可区分元素的列表?谢谢!
期望输出:
[A, B, C, D]

如果您发布了txt的片段和任何您尝试的代码,则会有所帮助。 - vash_the_stampede
1
@Ferreroire,如果您认为这个答案解决了您的问题,可以接受并点赞,这样它就会从未回答的队列中移除。 - Karn Kumar
3个回答

27

这就是你需要使用 set() 的原因:

>>> lst1 = ['A','A','A','B','C','C','D','D','D','B','B']
>>> list(set(lst1))
['A', 'B', 'D', 'C']

使用OrderedDict是另一种保持插入顺序的键的解决方案。

>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys(lst1))
['A', 'B', 'C', 'D']

如果你有使用Pandas的自由,那么可以尝试以下方法...

>>> import pandas as pd
>>> drop_dups  = pd.Series(lst1).drop_duplicates().tolist()
>>> drop_dups
['A', 'B', 'C', 'D']

如果您正在寻找两个文件之间的共同数值:

$ cat getcomn_vals.py
#!/python/v3.6.1/bin/python3
def print_common_members(a, b):
    """
    Given two sets, print the intersection, or "No common elements".
    Remove the List construct and directly adding the elements to the set().
    Hence assigned the dataset1 & dataset2 directly to set()
    """

    print('\n'.join(s.strip('\n') for s in a & b) or "No common element")

with open('file1.txt') as file1, open('file2.txt') as file2:
    dataset1 = set(file1)
    dataset2 = set(file2)
    print_common_members(dataset1, dataset2)

非常感谢!那非常有帮助! - ShinyPebble

6

0
我们可以使用 itertools.groupbysorted 来获取这个唯一元素列表。
from itertools import groupby

with open('text.txt') as f:
    content = [line.strip('\n') for line in f]

l = [k for k, g in groupby(sorted(content))]
print(l)
# ['A', 'B', 'C', 'D']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接