gpt4 book ai didi

python - 访问索引为 "flattened"的二维列表的好方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:20 24 4
gpt4 key购买 nike

假设我们有一个 2D、3x3 的列表:

lst =  [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]

使用“扁平化”索引访问 list 元素的推荐方法是什么?

我的意思是,我只有 0 到 9 之间的数字。如何访问相应的 list[i][j] 元素?

最佳答案

您可以使用除法和取模来计算二维坐标(仅当所有子列表具有相同大小时才有效)

def get_item(lst,i):    
return(lst[i//len(lst[0])][i%len(lst[0])])

请注意,展平列表以访问项目是 O(n**2) 复杂度,而此方法是 O(1)

如果子列表长度可变,则必须先找到子列表,不能使用除法。但是一旦找到正确的子列表,您就有了 O(1) 访问权限:

lst = [[1, 2, 3, 4],
[5, 6],
[7,8,9,10]]

def get_item(lst,i):
current = 0
for sublist in lst:
index = i - current
if 0 <= index < len(sublist):
return sublist[index]
current += len(sublist)
raise Exception("index out of range {}".format(i))

print(get_item(lst,0),get_item(lst,6),get_item(lst,9))

打印:1 7 10

关于python - 访问索引为 "flattened"的二维列表的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56854672/

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