[英]Identify unique values from list of lists, with each list having at least n unique elements
我有一份清單
measurements = [[1,2,3],[1,3,5,6],[4,6,7,8]]
我需要相對於其他列表從每個列表中檢索 N 個唯一元素。 假設 N = 2。結果必須是
result = [[1,2],[5,6],[7,8]]
當然可以有其他組合,但我只需要一個這樣的組合。 有沒有辦法得到這個?
如果你想要獨特的元素,集合是要走的路。 要從列表列表中獲取唯一值,請嘗試以下操作:
>>> measurements = [[1,2,3],[1,3,5,6],[4,6,7,8]]
>>> result = set(x for l in measurements for x in l)
>>> result
{1, 2, 3, 4, 5, 6, 7, 8}
或者
>>> from itertools import chain
>>> measurements = [[1,2,3],[1,3,5,6],[4,6,7,8]]
>>> print(set(chain(*measurements)))
{1, 2, 3, 4, 5, 6, 7, 8}
import random
measurements = [[1,2,3],[1,3,5,6],[4,6,7,8]]
result = []
N = 2
for x in measurements:
result.append(random.sample(x,N)
print(result)
您可以先將列表列表轉換為集合列表,然后通過使用functools.reduce
對其他集合執行set.difference
來查找每個集合中的唯一元素:
from functools import reduce
measurements = [[1,2,3],[1,3,5,6],[4,6,7,8]]
sets = list(map(set, measurements))
diffs = [reduce(set.difference, sets[:i] + sets[i+1:], sets[i]) for i in range(len(sets))]
diffs
將變為:
[{2}, {5}, {8, 4, 7}]
然后從diffs
列表中的每個集合中獲取N
項目將是微不足道的:
result = []
for diff in diffs:
result.append([])
for _ in range(2): # assuming N = 2
try:
result[-1].append(diff.pop())
except KeyError:
pass
result
會變成:
[[2], [5], [8, 4]]
請注意,您問題中的預期輸出[[1,2],[5,6],[7,8]]
是不正確的,因為1
和6
都不是唯一的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.