Как уменьшить вложенную сложность For Loop в python? - PullRequest
2 голосов
/ 11 июля 2019

В приведенном ниже коде мой внешний цикл выполняется без необходимости, даже если условие выполняется на первой итерации. Я не хочу запускать вложенный цикл без необходимости. Как уменьшить сложность вложенного цикла, чтобы повысить производительность кода?

 for i in List1:
   for j in sourceList:
     for k in List2:
      if (j[0]==i[1] and j[1]==k[1]):
       print (i[0],k[0])

Ответы [ 3 ]

1 голос
/ 11 июля 2019

Вы можете проверить первое условие if j[0] == i[1] перед началом самого внутреннего цикла и break в первом совпадении.

for i in List1:
    for j in sourceList:
        #Check condition and only then run inner loop
        if j[0] == i[1]:
            for k in List2:
                #Break out of loop on first match
                if j[1] == k[1]:
                    print(i[0], k[0])
                    break
        else:
            continue
1 голос
/ 11 июля 2019

Учитывая, что ваша цель состоит в том, чтобы печатать строку за строкой i[0], k[0], вы можете использовать списки, чтобы уменьшить сложность цикла for следующим образом:

'\n'.join(f'{i[0]},{k[0]}' for i in List1 for j in sourceList if j[0]==i[1] for k in List2 if j[1]==k[1])
0 голосов
/ 11 июля 2019

Вы можете сделать break:

for i in List1:
    for j in sourceList:
        for k in List2:
            if (j[0]==i[1] and j[1]==k[1]):
                print (i[0],k[0])
                break

Или используйте def (функция):

def f():
    for i in List1:
        for j in sourceList:
            for k in List2:
                if (j[0]==i[1] and j[1]==k[1]):
                    return (i[0],k[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...