当前位置: 代码迷 >> python >> 在Python中搜索值时出错
  详细解决方案

在Python中搜索值时出错

热度:116   发布时间:2023-06-13 17:18:10.0

我有一个具有以下值的链表:

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__'

我假设input将是您的列表列表。 在这种情况下,

for i in input:

在每次迭代中都会给您每个子列表作为i 通过尝试访问

i[0][0]

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

  • i会给[4, 1, 2, 2]
  • i[0]将给出4 ,并且
  • i[0][0]毫无意义

请改用i[0]

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

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

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]
  相关解决方案