我想要以下具有重叠元素的列表列表中的项目索引。
slist = [[1, 2, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3, 4], [7, 8, 9, 10]]
输出应该是这样的:
[0,1,2] and [3]
我尝试了以下方法,但它给了我成对的值,很难像我期望的那样从中分离出值
for ((i,a),(j,b)) in itertools.combinations(enumerate(slist),2):
if len(a.intersection(b)) > 0:
print("overlapping",i,j)
else:
print("non overlapping",i,j)
Output:
('non overlapping', 0, 1)
('non overlapping', 0, 2)
('overlapping', 0, 3)
('overlapping', 1, 2)
('non overlapping', 1, 3)
('non overlapping', 2, 3)
最佳答案
您可以使用列表理解来做到这一点:
>>> slist = [[1, 2, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3, 4], [7, 8, 9, 10]]
>>> sets = tuple(map(set, slist))
>>> list(map(list, {tuple(i for i, _s in enumerate(sets) if s & _s) for s in sets}))
[[0, 1, 2], [3]]
如果它使它更具可读性/可理解性,我只是使用 map 将元组再次制作成列表。您需要使用元组,因为列表和集合是不可散列的。如果您不映射列表,那么它的可读性更高,但它会生成一个元组列表。
list({tuple(i for i, _s in enumerate(sets) if s & _s) for s in sets}))
关于python - 我有一个列表列表,如何提取具有公共(public)值的子列表的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56853652/