Python, я хочу использовать функцию для цикла - PullRequest
0 голосов
/ 21 октября 2019

Я хочу использовать sub_code_stop для цикла (в списке)

sub_change = [[0, '150', 'aaa'], [0, '151', 'ccc'],
              [0, '152', 'bbb'], [0, '152', 'ddd']]


def sub_code_stop(a):
    for cc in sub_change:
        if a == cc[1]:
            return cc[2]
        else:
            return 0


lis = [['150', '151'], ['152', '153']]
for i in lis:
    print(sub_code_stop(i[0]))

Возврат:

aaa
0

Я хочу

aaa
bbb

Ответы [ 2 ]

4 голосов
/ 21 октября 2019

Измените функцию на:

def sub_code_stop(a):
    for cc in sub_change:
        if a == cc[1]:
            return cc[2]

    return 0

Ваш предыдущий код сравнивался только с первым элементом sub_change.


Если второй элемент каждого подсписка в sub_change были уникальными, вы могли бы сделать:

sub_change = [[0, '150', 'aaa'], [0, '151', 'ccc'],
              [0, '152', 'bbb'], [0, '153', 'ddd']]
sub_dict = {b:c for Ellipsis,b,c in sub_change}
lis = [['150', '151'], ['152', '153']]
for i in lis:
    print(sub_dict.get(i[0],0))
2 голосов
/ 21 октября 2019

В вашем текущем коде, если первый элемент не совпадает, вы оставляете функцию с return в остальной части. Вам придется продолжить цикл, чтобы проверить следующие элементы.

Если вы найдете что-то, вы вернете соответствующее значение. Если вы ничего не нашли, то вам придется иметь дело с этим после завершения цикла.

def sub_code_stop(a):
    for cc in sub_change:
        if a == cc[1]:
            return cc[2]
    return 0
...