如何从列表中只获取不同的值?

新手上路,请多包涵

我正在尝试遍历文本文件中的一列,其中每个条目只有三个选择 A, B, and C

我想确定不同类型选择的数量 (another text file has A, B, C, and D) ,但是如果我使用 100 entries 遍历列中的每个元素并将其添加到列表中,我将有多个每种类型的重复。例如,如果我这样做,列表可能会 [A,A,A,B,C,C,D,D,D,B,B...] ,但我想删除无关的条目,只让我的列表显示可区分的类型 [A,B,C,D] ,无论有多少条目曾经有。

有什么想法可以将包含许多公共元素的列表缩减为仅显示不同的可区分元素的列表吗?谢谢!

期望的输出:

[A, B, C, D]

原文由 Ferreroire 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 467
2 个回答

这就是您需要的 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)

原文由 Karn Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题