设置
给定一个列表列表,如下所示:
lll = []
for _ in range(5):
ll = [random.sample(range(1, 20), 5),
random.sample(range(1, 20), 5),
random.sample(range(1, 20), 5)]
lll.append(ll)
这可能会给:
[[[1, 15, 12], [8, 5, 13], [1, 9, 12]],
[[4, 1, 19], [11, 18, 3], [8, 14, 6]],
[[17, 8, 4], [1, 16, 3], [19, 13, 11]]]
最终目标
我想获得一个元素出现的最低索引,并以字典的形式返回这个输出,例如:
{0: {1, 17, 19, 4, 8, 11}, 1: {5, 9, 13, 14, 15, 16, 18}, 2: {3, 12, 6}}
例如,在lll上面,8出现在 3 个子列表中。但它在单个子列表中的最低位置是 at 0,这就是它在最终字典中 key 的原因0。
约束
我必须迭代(我的用lll例假设我不知道完整的lll)。因此,traversal_dct意志会随着时间的推移而建立。上面看到的lll是用于演示目的的虚拟数据。
工作解决方案
这种当前的方法有效,但我相信它会更有效。
traversal_dct = {}
for ll in lll:
llT = [*map(list, zip(*ll))]
for i,xs in enumerate(llT):
if i not in traversal_dct.keys():
traversal_dct[i] = set()
traversal_dct[i] = traversal_dct[i].union(set(xs))
for i1,key1 in enumerate(traversal_dct.keys()):
for i2,key2 in enumerate(traversal_dct.keys()):
if i2 > i1:
traversal_dct[i2] = traversal_dct[i2] - traversal_dct[i1]
慕沐林林
守着一只汪
侃侃无极
相关分类