我有 3 個串列:
l1 = ['a', 'b', 'c', 'd', 'e', 'q', 'w']
l2 = ['a', 'g', 'h', 'd', 'k']
l3 = ['z', 'b', 'v', 'n', 'k', 's']
我想創建某種過濾器,它只會在這 3 個串列中留下唯一的元素。所以l1應該只有不在l2and中的元素,l3我想對每個串列都做同樣的事情。期望的輸出:
l1 = ['c', 'e', 'q', 'w']
l2 = ['g', 'h']
l3 = ['z', 'v', 'n', 's']
我有 6 個串列,每個串列包含超過 5000 個元素,并且串列的長度不同。我正在考慮做一些交叉點,但我必須做很多 for 回圈。
有什么 Pythonic 的方法嗎?
uj5u.com熱心網友回復:
我會使用Counter:
>>> l1 = ['a', 'b', 'c', 'd', 'e', 'q', 'w']
>>> l2 = ['a', 'g', 'h', 'd', 'k']
>>> l3 = ['z', 'b', 'v', 'n', 'k', 's']
>>> import itertools
>>> import collections
>>> counter = collections.Counter(itertools.chain(l1, l2, l3))
>>> [i for i in l1 if counter[i] == 1]
['c', 'e', 'q', 'w']
>>> [i for i in l2 if counter[i] == 1]
['g', 'h']
>>> [i for i in l3 if counter[i] == 1]
['z', 'v', 'n', 's']
請注意,如果您有一堆串列想要做完全相同的事情,您可能只想要一個串列串列而不是一堆單獨的變數:
>>> all_lists = [l1, l2, l3]
>>> counter = collections.Counter(i for a in all_lists for i in a)
>>> [[i for i in a if counter[i] == 1] for a in all_lists]
[['c', 'e', 'q', 'w'], ['g', 'h'], ['z', 'v', 'n', 's']]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/448853.html
標籤:Python
