Python 2.7:从列表中获取所有唯一值,去除任何重复的值
在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'])