[英]Finding list containing unique elements in list of lists in python?
說我有一個像這樣的清單清單:
list = [[1,2,3,4],[4,5,3,2],[7,8,9,2],[5,6,8,9]]
我想獲取包含唯一元素的內部列表的索引。 對於上面的示例,索引2的列表是唯一包含7的列表,索引3的列表是唯一包含6的列表。
如何在python中實現呢?
這是使用Counter
的解決方案。 檢查每個內部列表的值是否只有一個計數,然后打印相應的索引(la enumerate
)。
from collections import Counter
from itertools import chain
c = Counter(chain.from_iterable(l))
idx = [i for i, x in enumerate(l) if any(c[y] == 1 for y in x)]
print(idx)
[0, 2, 3]
可能的優化可能包括預先計算集合中的唯一元素,以用set.intersection
替換any
調用。
c = Counter(chain.from_iterable(l))
u = {k for k in c if c[k] == 1}
idx = [i for i, x in enumerate(l) if u.intersection(x)]
一個幼稚的解決方案:
>>> from collections import Counter
>>> from itertools import chain
>>> my_list = [[1,2,3,4],[4,5,3,2],[7,8,9,2],[5,6,8,9]]
# find out the counts.
>>> counter = Counter(chain(*my_list))
# find the unique numbers
>>> uniques = [element for element,count in counter.items() if count==1]
# find the index of those unique numbers
>>> result = [indx for indx,elements in enumerate(my_list) for e in uniques if e in elements]
>>> result
[0, 2, 3]
使用帶有set.difference(set)
itertools.chain
from itertools import chain
l = [[1,2,3,4],[4,5,3,2],[7,8,9,2],[5,6,8,9]]
[i for i in range(len(l)) if set(l[i]).difference(set(chain(*[j for j in l if j!=l[i]])))]
#[0, 2, 3]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.