python пропускает следующий индекс в цикле, если выполняется условие в 2 списках

#python #python-3.x #list

Вопрос:

Я новичок в python, поэтому не уверен, что это лучший подход.

У меня есть 2 списка с одинаковым количеством значений. Я хочу сравнить значения каждого индекса из 2 списков, т. е. индекс 1 игрока 1 игроку 2, индекс 2 игрока 1 игроку 2 и так далее.

если значения индекса 1 от игрока 1 до игрока 2 совпадают, добавьте 2 балла и пропустите следующий индекс в обоих списках. Возникли проблемы с определением того, как пропустить следующий индекс, если оба значения индекса 1 совпадают. Пожалуйста, помогите.

Это мой код:

 player1 = ['yes', 'deal', 'no', 'no deal', 'no', 'deal']
player2 = ['yes', 'no deal', 'yes', 'deal', 'no', 'deal']

count = 0
skip_count = 0

for i in range(len(player1)):
    if player1[i] == player2[i]:
        count  = 2
        skip_count = 0
    else:
        count  = 1
 

когда я печатаю количество, оно не пропускается, как я хочу, чтобы какие-либо мысли?

Комментарии:

1. вы можете использовать continue для пропуска итерации. Так что да и да будут сравниваться, но сделка и никакая сделка не будут пропущены.

Ответ №1:

Вы можете использовать zip() для создания генератора, который будет повторять два списка попарно. Когда условие выполнено, вы можете использовать next() для создания следующей пары в итераторе, «пропуская» эту пару:

 player1 = ['yes', 'deal', 'no', 'no deal', 'no', 'deal']
player2 = ['yes', 'no deal', 'yes', 'deal', 'no', 'deal']
pairs = zip(player1, player2)
count = 0
for a, b in pairs:
    if a == b:
        count  = 2
        next(pairs, None)
    elif a != b:
        count  = 1
        comp = next(pairs, True)
        if 'deal' and 'deal' in comp:
            count  = -2
            break
        elif 'no deal' and 'deal' in comp:
            count  = -1
            break
        elif 'no deal' and 'no deal' in comp:
            count  = 0
            break
        else:
            break
    else:
        break
print(count)
 

Комментарии:

1. Спасибо тебе, Иэн! Ваше приложение лучше всего подходило для того, чего я пытаюсь достичь. Проблема в том, что я продолжаю неправильно вычислять переменную count во 2-й части кода. Есть какие-нибудь предложения?

2. Берегись, if 'deal' and 'deal' in comp: это равносильно if bool('deal') and ('deal' in comp): . Если вы хотите проверить, что comp содержит два экземпляра «сделки», вам следует попробовать другой подход.

3. да, я хочу проверить, что comp содержит два экземпляра «сделки»: есть предложения? @кевин

Ответ №2:

Используйте while петлю. Можно было бы лучше контролировать значение sentinel (или) значение итератора (переменная, управляющая входом в реализацию циклов).

 player1 = ['yes', 'deal', 'no', 'no deal', 'no', 'deal']
player2 = ['yes', 'no deal', 'yes', 'deal', 'no', 'deal']

cap = len(player1)
i = 0 # sentinel

while i < cap:
    if player1[i] == player2[i]:
        i  = 1 # handle the skip
    i  = 1 # handle next

''' In simpler terms
while i < cap:
    if player1[i] == player2[i]:
        i  = 2
    else :
        i  = 1
'''
 

Комментарии:

1. спасибо, но я думаю, что у меня возникли проблемы с пониманием того, где находится точка/количество, если я представляю индекс и ограничение на общую сумму. Тем не менее, спасибо вам!