gpt4 book ai didi

python - 获取 3d 列表中唯一元素的最低索引的高效算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:56:22 26 4
gpt4 key购买 nike

设置

给定一个列表的列表,如下所示:

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个子列表中。但它在单个子列表中的最低位置是 0,这就是为什么它在最终字典中的键 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]

最佳答案

我认为你让这件事变得比需要的更难。

无论你有多少维度,将其展平为二维;你没有使用任何比 3 元素列表更深层次的东西。

现在简单的做一个集合列表,每个维度的元素

e = [set(row[col] for row in 2d_list) for col in range(len(2d_list[0]))]

现在,从这些集合中的每一个中减去(集合差异)之前的每个集合。

e[1] -= e[0]
e[2] -= e[0] + e[1]

...您也可以在循环中对其进行参数化。

关于python - 获取 3d 列表中唯一元素的最低索引的高效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58348437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com