Python Выполнять действия со всеми элементами списка и включать в вывод только некоторые с помощью List Computing - PullRequest
0 голосов
/ 19 июня 2020

У меня есть следующая функция, которая отлично работает:

output = []
for a, b in itertools.product(
    list_a, list_b
):
    x= perform_action(a,b)

    if b.relevant:
        output.append(x)

return output

Как я могу переписать это, используя понимание списка - если возможно?

Короче говоря, я ищу perform_action для всех элементов и включать в вывод только соответствующие.

Воспроизводимый пример:

from itertools import product
a = [2,3,4]
b = ["a","b"]

def foo(p,r):
  out = "{0}---{1}".format(p,r)
  print(out)
  return out

li = [foo(p,r) for p,r in product(a,b) if p>3]

print(li)

1 Ответ

2 голосов
/ 19 июня 2020

Что вы думаете о двух уровнях понимания списка?

return [x for  b, x in [(b, perform_action(a,b)) for a,b in itertools.product(l_a, l_b)] if b.relevant]

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

...