比较列表中的元素时索引超出范围错误

时间:2019-10-23 03:28:02

标签: python list indexing tuples range

我想用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')   

4 个答案:

答案 0 :(得分:0)

您必须替换:

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

具有:

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

由于您仅检查第一个元素。

答案 1 :(得分:0)

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

根据您最终使用此结构的精确程度,您可能希望在遇到这种情况的情况下结束

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): ...

用于扁平化的适当列表表示。

答案 2 :(得分:0)

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

因此而不是

list(resultado[i])[i]

您应该使用

resultado[i][0]

答案 3 :(得分:0)

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

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

此外,请进一步说明,因为说明中说:“ 我想用python创建一个简单的程序,该程序返回我的名字,或者如果不是我的名字,则显示'error'。”但是,然后在您说出“ 如果其中的单词是Leonardo,那么它应该打印错误。”之后。您是否要让程序打印出不是您的名字还是名字的错误?除此之外,祝您编程愉快! (P.S.您不能返回自己的名字,除非它在函数中)