在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]]

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

示例:我想要switch_list中第一个数字等于4的所有值,那么函数将返回:

[[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]

编辑:请注意,这个答案只是用来指出你当前的问题。dursk的回答为你提供了其他的解决方案,这些解决方案要强大得多(列表理解是一个非常棒的工具,我建议你研究一下)。

相关内容

  • 没有找到相关文章

最新更新