在 Python 中搜索值时出错

Error when search values in Python

我有一个包含以下值的链表:

switch_list = [[4, 1, 2, 2],
               [4, 2, 3, 2],
               [3, 1, 1, 3],
               [3, 2, 4, 2],
               [1, 3, 3, 1],
               [1, 2, 2, 1], 
               [2, 1, 1, 2],
               [2, 2, 4, 1]]

我的目标是将一个整数与所有链表的第一个值进行比较,然后 return 一个具有过滤值的新列表。

示例:我希望 switch_list 中的所有值的第一个数字等于 4,那么函数将 returns:

[[4, 1, 2, 2], [4, 2, 3, 2],]

这是我的程序:

def bucket(value, input): 

    output = []

    for i in input:
        if i[0][0] == value:
            output.append(i)

    return output

这是输出错误:

File "matrix_optimizate.py", line 63, in bucket
  if i[0][0] == value:
TypeError: 'int' object has no attribute '__getitem__'

您已经在外部列表上进行迭代,因此不需要两次索引查找。

for i in input:
    if i[0] == value:
        output.append(i)

此外,还有一种更优雅的方法可以使用 filter:

def bucket(input, value):
    return filter(lambda x: x[0] == value, input)

此时你可能甚至不需要它,因为它有自己的功能。

最后,您还可以使用列表推导式:

[i for i in input if i[0] == value]

我假设 input 将成为您的列表列表。那样的话,

for i in input:

将在每次迭代期间为您提供每个子列表 i。通过尝试访问

i[0][0]

您正在尝试访问子列表元素的第一个元素。在你的例子中

  • i 会给出 [4, 1, 2, 2]
  • i[0] 会给出 4
  • i[0][0] 因此没有意义

请尝试 i[0]

编辑:请注意,此答案仅用于指出您当前的问题。 为您尝试作为一个整体执行的操作提供了其他解决方案,并且这些选项更强大(列表理解是一个很棒的工具,我建议您研究一下)。