关于python:如何从列表中只获取不同的值?

How to get only distinct values from a list?

本问题已经有最佳答案,请猛点这里访问。

我试图遍历文本文件中的一列,其中每个条目只有三个选项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],不管有多少条目。

我有什么想法可以把一个有许多公共元素的列表简化成只显示不同可分辨元素的列表吗?谢谢!

期望输出:

埃多克斯1〔5〕


python中有一个名为set的数据结构不允许重复。这可能会帮到你。

docs.python.org上set()的文档


这是您对set()所需要的:

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

号另一个解决方案是OrderedDict,在插入期间保持键的顺序。

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

如果你有使用熊猫的自由,那么试试下面的。

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

如果要查找两个文件之间的公共值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ 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('
'
.join(s.strip('
'
) 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)


我们可以使用itertools.groupby和sorted来获得这个唯一元素列表。

1
2
3
4
5
6
7
8
9
from itertools import groupby

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

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