此函数返回列表、列表和列表中元素的最大数量。我认为这是一个正确的方法,但我一直得到错误:
'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]
行的要求工作,因此第一种方法最适合您的问题。