Python 2.7:从列表中获取所有唯一值,去除任何重复的值

0 投票
10 回答
843 浏览
提问于 2025-04-18 15:17

在Python 2.7中,怎样才能合理地从一个列表中获取唯一的值呢?举个例子,如果某个值出现了多次,就把这个值和它的所有重复都删掉。这样,我们最后得到的列表里只会有那些从来没有重复过的值。

直观上,我会从这个列表创建一个set(集合),再创建一个bag(也就是multiset,可以理解为一个可以重复的集合),然后从原列表中找出那些不在bag中且不在set中的值。不过,我找不到在Python 2.7中简单实现bag(或multiset)的方法。有没有什么建议?如果能仅用集合和袋子操作来实现那就太好了。

示例
这是我用暴力方法实现的最佳示例:

这个例子使用了一个朋友列表,如果某个朋友出现超过一次,那他就不再是朋友了:

list_of_friends = ['bill','bill','mark','jenna','brad','mark']
unique_list_of_friends = []
for friend in list_of_friends:
    if (friend in list_of_friends):
        list_of_friends.remove(friend)
        if (friend not in list_of_friends):
            unique_list_of_friends.append(friend)
        # Ensure that all duplicates of current friend are removed
        list_of_friends = [f for f in list_of_friends if f != friend]

最后,我们得到的结果是:

unique_list_of_friends = ['jenna','brad']

相关问题:

10 个回答

1

如果因为某些原因你不能使用 Counter(真不知道为什么会这样?)

list_of_friends = ['bill','bill','mark','jenna','brad','mark']
a_set = set()
b_set = set()
for friend in list_of_friends:
    if friend not in a_set:
        a_set.add(friend)
    else:
        b_set.add(friend)
result = a_set - b_set
1

试试这个:

list_of_friends = ['bill','bill','mark','jenna','brad','mark']
unique_list_of_friends = [i for i in list_of_friends if list_of_friends.count(i) == 1]
print(unique_list_of_friends)
3

你可以使用一个 Counter

>>> from collections import Counter
>>> c = Counter(['bill','bill','mark','jenna','brad','mark'])
>>> [k for k in c.keys() if c[k] == 1]
['brad', 'jenna']
6
>>> from collections import Counter
>>> list_of_friends = ['bill','bill','mark','jenna','brad','mark']
>>> [k for k, v in Counter(list_of_friends).items() if v == 1]
['brad', 'jenna']
>>> 

这段代码的作用是...

首先,它会...

接着,它会检查...

如果满足某个条件,它就会...

最后,代码会返回...

总的来说,这段代码的目的是...

希望这个解释能帮助你更好地理解这段代码!

2

这有点像你用集合或袋子描述的方法。

>>> from collections import Counter
>>> list_of_friends = ['bill','bill','mark','jenna','brad','mark']
>>> S = set(list_of_friends)
>>> bag = Counter(list_of_friends)
>>> S.difference(bag - Counter(S))
set(['brad', 'jenna'])

撰写回答