Ошибка индекса вне диапазона при сравнении элементов в списке - PullRequest
0 голосов
/ 23 октября 2019

Я хочу создать простую программу на python, которая возвращает мое имя или выдает «error», если это не мое имя. Это просто. Мол, я хочу дать этот список:

(('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 голосов
/ 23 октября 2019

Вам нужно будет перебирать каждый список внутри списка. Еще один способ сделать это:

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

Также, пожалуйста, будьте немного яснее с инструкциями, так как инструкции говорят: " Я хочу создать простую программу на python, которая возвращает мое имя или печатать'error', если это не мое имя."Но тогда сразу после того, как вы скажете" , если слово внутри них - Леонардо, тогда должно появиться сообщение об ошибке."Хотите, чтобы программа выводила ошибку, еслиэто не ваше имя или если это так? Кроме этого, счастливого кодирования! (PS Вы не можете вернуть свое имя, если оно не входит в функцию)

0 голосов
/ 23 октября 2019

Вводимые вами данные на самом деле не являются списком;это кортеж кортежей.

В зависимости от того, как именно вы оказались с этой структурой, вам, вероятно, хотелось бы оказаться в ситуации, когда вместо текущего используется

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

для правильного представления списка.

0 голосов
/ 23 октября 2019

Поскольку это вложенный кортеж, вы только зацикливаете первый слой и получаете первый элемент вложенного кортежа. Таким образом, вы используете [i] для первого индекса и [0] для второго.

Поэтому вместо

list(resultado[i])[i]

Вы должны использовать

resultado[i][0]
0 голосов
/ 23 октября 2019

Вы должны заменить:

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

на:

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

Поскольку вы проверяете только первый элемент.

...