【发布时间】:2021-01-01 08:15:54
【问题描述】:
我正在编写一个基本迭代两个列表乘积的 for 循环。在大多数情况下,定义了两个列表,因此迭代产品没有问题。但是,也存在未定义两个列表之一的情况。此外,可能存在两个列表都没有定义的情况。我可以在下面的代码sn-p中更改函数bar,使其只有一个处理各种情况的single for-loopwithout if statements吗?
import itertools
def foo(a, b):
print(a, b)
def bar(lista, listb):
# How can I make this function more concise?
if lista and listb:
for a, b in itertools.product(lista, listb):
foo(a, b)
elif lista:
for a in lista:
foo(a, listb)
elif listb:
for b in listb:
foo(lista, b)
else:
foo(lista, listb)
print("Case #1. When both lists are defined.")
lista = [1, 2]
listb = [3, 4]
bar(lista, listb)
print("Case #2. When only lista defined.")
lista = [1, 2]
listb = None
bar(lista, listb)
print("Case #3. When only listb is defined.")
lista = None
listb = [3, 4]
bar(lista, listb)
print("Case #4. When neither of two list are defined.")
lista = None
listb = None
bar(lista, listb)
【问题讨论】:
-
顺便说一句,
itertools.product(*[lista, listb])是一种过度设计的写作方式itertools.product(lista, listb) -
@juanpa.arrivillaga 感谢您的建议。按照您的建议更新了代码。
标签: python python-3.x for-loop itertools generic-programming