如何访问2D/3D列表中内部元素的长度



此函数返回列表、列表和列表中元素的最大数量。我认为这是一个正确的方法,但我一直得到错误:

'TypeError: list indices must be integers or slices, not lists'

这是清单:

list = [[0, [1, 2, 3]], [1, [0, 1, -3, 8, 5]], [2, [0, 7, 2, 1, -5]], [3, [0, 4, 1, -9]], [4, [0, 6, -2, 3]],
[5, [0]], [6, [0, 2, -1, 8]], [7, [0, -7, 3]], [8, [0, 8, 5, 6, 3]], [9, [0, -4, 1, 9]]]

功能如下:

def max_inner_list_length(list):
maximum = 0
for i in list:
if len(list[i][1]) > maximum:
maximum = len(list[i][1])
return maximum

示例:

max_inner_list_length(list)

预期输出:5

实际输出:TypeError: list indices must be integers or slices, not lists

您的代码中存在两个问题
导致错误的第一个原因是for i in List将遍历list的非整数值。但是,您将L[i]放在正下方,其中i必须是一个整数
第二个事实是list是python中引用类型列表的保留名称。因此,您不应该将列表命名为list(或字符串str(,而应该将其命名为L

您应该将代码替换为:

def max_inner_list_length(L):

maximum = 0
for i in range(len(L)):
if len(L[i][1]) > maximum:
maximum = len(L[i][1]) #I suppose network is a variable
#outside the function context,
return maximum                 #which should be replace by L

或者,您可以通过更改以下行来将您的行保持在for循环中,如下所示:

def max_inner_list_length(L):

maximum = 0
for i in L:
if len(i[1]) > maximum:
maximum = len(i[1])
return maximum

如果你需要找到列表的最大长度,那么你可以使用下面的片段,它会返回最大长度,即在给定的情况下为5。我不理解len(network[i][1])的部分,你可以自己编辑剩下的部分。如果您需要进一步的帮助,请随时发表评论。

def max_inner_list_length(list):
maximum = 0
for i in range(len(list)):
if len(list[i][1]) > maximum:
maximum = len(list[i][1])       
return maximum
print(max_inner_list_length(list))

我认为你把len(network[i][1])分配到了最大值,这就是为什么你没有得到想要的结果。此外,一个建议是永远不要使用内置的函数名作为变量。

以内置的python函数命名变量是一种糟糕的做法,因为它会覆盖它们。对于这个答案,我已经将list重命名为lst

目前,您正在以i的形式迭代列表中的每个元素,因此在调用lst[i][1]时,第一个i将是(0, [1, 2, 3]),这不是有效索引。您可以通过运行进行检查

for i in lst:
print(i)

您需要将for循环更改为for i in range(len(lst)),然后您将循环遍历索引而不是元素,如下所示:

def max_inner_list_length(lst):
maximum = 0
for i in range(len(lst)):
if len(lst[i][1]) > maximum:
maximum = len(network[i][1])
return maximum

或者,您可以按原样使用i,并使用它来代替lst[i],如下所示:

for i in range(len(lst)):
if len(i[1]) > maximum:

然而,这可能无法按network[i][1]行的要求工作,因此第一种方法最适合您的问题。

相关内容

  • 没有找到相关文章

最新更新