【问题标题】:Index out of range error when comparing elements in list比较列表中的元素时出现索引超出范围错误
【发布时间】:2020-02-19 05:44:46
【问题描述】:

我想在 python 中创建一个简单的程序,它返回我的名字,如果不是我的名字,则打印“错误”。 这是基本的。就像,我想给出这个清单:

(('Leonardo',), ('Leonardo',), ('Leonardo',), ('Leonardo',), ('Leonardo',), ('Leonardo',), ('Leonardo',), ('Leonardo',), ('Leonardo',), ('Leonardo',), ('0122',), ('0122',), ('0122',), ('0122',), ('0122',))

然后检查所有元素,如果其中的单词是Leonardo,那么它应该打印error。谁能帮我?

我试过这个,但它让我的列表索引超出范围:

 for i in range(len(resultado)):
     if list(resultado[i])[i] == 'Leonardo':
         print('erro')   

【问题讨论】:

  • resultado = 列表名称
  • 您想要做一个嵌套循环来迭代内部列表的内容。例如,当前您正在访问列表的索引 2,产生 ('Leonardo',)。然后,尝试获取此列表的索引 2 会超出范围,因为只有 1 个值。
  • 尝试如果 resultado[i][0] == 'Leonardo': (假设 resultado 是列表的名称)。这会检查每个子列表的第一个元素。
  • for i in range(len(resultado)) 除了一次拉出一个元素之外,您实际上并没有将i 用于任何事情,这只是椒盐卷饼的逻辑。您只需 for item in resultado 循环遍历列表中的项目。

标签: python list indexing tuples range


【解决方案1】:

您需要循环浏览列表中的每个列表。 另一种方法是:

for i in resultado:
    for a in i:
       if "Leonardo" in a:
            print("Leonardo")
       else:
            print("error")

另外,请更清楚地说明说明,因为说明说“我想在 python 中创建一个简单的程序,它返回我的名字,如果不是我的名字,则打印'错误'。”但是在你说“如果里面的单词是 Leonardo,那么它应该打印错误。”之后,如果它不是你的名字,你是否希望程序打印错误?除此之外,快乐的编码! (P.S. 你不能返回你的名字,除非它在一个函数中)

【讨论】:

    【解决方案2】:

    你必须替换:

    if list(resultado[i])[i] == 'Leonardo':
    

    与:

    if resultado[i][0] == 'Leonardo':
    

    因为您只检查第一个元素。

    【讨论】:

    • 相反,if list(resultado[i][0]) == ['Leonardo']: 也可以使用,当然将两边都转换为列表是完全浪费的,但有助于突出这到底是怎么回事。同样if list(resultado[i][0])[0]将第一个元素转换为列表,然后从该列表中提取第一个元素(-:但正确的解决方案可能是拥有一个实际列表,而不是元组的元组,只需检查if 'Leonardo' in that_list
    【解决方案3】:

    因为它是一个嵌套元组,所以您只需循环第一层并获取嵌套元组的第一个元素。因此,您使用 [i] 作为第一个索引,使用 [0] 作为第二个索引。

    因此而不是

    list(resultado[i])[i]
    

    你应该使用

    resultado[i][0]
    

    【讨论】:

      【解决方案4】:

      您提供的输入实际上不是一个列表;它是一个元组的元组。

      根据你最终得到这个结构的确切程度,你可能希望最终处于这样的情况

      resultado_list = ['Leonardo', 'Leonardo', 'Leonardo', ...]
      

      而不是当前的嵌套结构。那么你可以简单地说

      if 'Leonardo' in resultado_list:
      

      要转换当前结构,假设它是统一的,你可以说

      resultado_list = [r[0] for r in resultado]
      

      这只是从每个嵌套元组中丢弃除第一个以外的任何值;但同样,您提供的数据表明没有元组有多个元素。尽管更有可能,首先创建嵌套结构的任何代码都应该被修复为返回一个没有嵌套的列表。

      如果你真的想保持原来的结构,当然也可以说

      if ('Leonardo',) in resultado:
      

      您尝试的错误是您尝试检查resultado[0][0](工作正常)、resultado[1][1](失败,因为没有第二个元素)、resultado[2][2](同上)等。简单的解决方法是更改resultado[i][i]resultado[i][0];但如上所述,您可以对此进行许多改进。

      如果您正在检查是否所有元素都是'Leonardo',那将是

      if all(r[0] == 'Leonardo' for r in resultado):
          print('all Leonardos!')
      else:
          print('erro')
      

      对于原始结构,并且

      if all(r == 'Leonardo' for r in resultado_list): ...
      

      用于扁平化、正确的列表表示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-06
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多