我想更改索引列表列表的方式。
假设我的初始列表是一个列表的两个列表和三个元素的两个列表。例如:
L = [[[1, 2, 3]], [[4, 5, 6], [7, 8, 9]]]
然后说我想在L中取'4',我必须这样做
L[1][0][0].
现在我想创建一个新列表,以使最后的索引成为第一个索引
Lnew = [[[1], [4, 7]], [[2], [5, 8]], [[3], [6, 9]]]
然后我取“ 4”就要做:
Lnew[0][1][0]
在更一般的情况下,我想创建列表Lnew定义:
Lnew[i][k][l] = L[k][l][i]
有没有一种方法可以执行这种索引排列而无需执行以下循环:
Lnew = []
for i in range(len(Payment_dates)):
L1 = []
for k in range(N+1):
L2 = []
for l in range(k+1):
L2.append(L[k][l][i])
L1.append(L2)
Lnew.append(L1)
就复杂性而言,这不是最佳选择。
谢谢
答案 0 :(得分:0)
您要实现的目标是,所有子列表的长度都相同。
如果它们的长度不同,则您可能希望将零添加到所有子列表,直到它们具有最长的子列表的长度为止(或者更容易)直到无限。
使用函数访问列表的元素可以实现相同的行为。您可以在运行时每次需要列表元素时调用此函数:
def getElement(myList, i, k, l):
if k < myList.length and l < myList[k].length and i < myList[k][l].length:
return myList[k][l][i]
else:
return None # or zero, or whatever you prefer
根据您的代码结构,您可能不需要将此作为函数,而只需将条件放入代码中即可。
您还可以嵌套if条件,并根据元素不存在的级别抛出不同的错误或返回不同的值。
如果我们忽略输出多维列表元素的时间复杂度,则此方法应将您的时间复杂度从O(n ^ 3)降低为O(1)。