假设我在python中有一个2D列表(每个列表的长度不相同,例如第一个列表包含3个元素,而第二个列表包含4个元素)。我还有另一个1D列表,其中包含2个元素。我需要找到包含1D列表的两个元素的2D列表的索引(不必按顺序排列)。我想非常高效地执行此任务,因为它将成为一项庞大的分析任务的一部分(特别是不使用循环)。
例如:
2D list: [[4, 0, 2], [0, 3, 2], [3, 0, 4], [5, 3, 4], [3, 5, 6], [8, 1, 2], [7, 3, 6], [1, 7, 6], [8, 7, 1], [2, 3, 7, 8]]
1D list: [3, 4]
output: 2, 3
使用列表结构不是必不可少的,python中是否还有其他结构可以更有效地完成它?
答案 0 :(得分:1)
不确定效率,但这是列表理解功能,可以获取您想要的结果:
max-width: 1300px
请注意,至少在涉及到lambda函数时(可能是您的情况),列表理解的性能往往比using Python's map/filter operations更好。
答案 1 :(得分:1)
如果设置了1D列表和子列表,则可以
list2d = [
{0, 2, 4}, {0, 2, 3}, {0, 3, 4}, {3, 4, 5}, {3, 5, 6},
{8, 1, 2}, {3, 6, 7}, {1, 6, 7}, {8, 1, 7}, {8, 2, 3, 7}
]
set1d = {3, 4}
i = 0
res = set()
for s in list2d:
if set1d <= s:
res.add(i)
i += 1
我非常想像一下这是用纯python可以达到的最快速度