gpt4 book ai didi

python - 如何编写一个循环遍历各种形式的可迭代对象?

转载 作者:行者123 更新时间:2023-12-04 08:54:54 26 4
gpt4 key购买 nike

我正在编写一个 for 循环,它基本上迭代两个列表的乘积。在大多数情况下,定义了两个列表,因此迭代产品没有问题。但是,也存在未定义两个列表之一的情况。此外,可能存在两个列表都未定义的情况。我可以更改功能吗bar在下面的代码片段中,它只有一个 single for-loop处理各种案件 without 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)

最佳答案

只需提前检查并更换 None具有可接受替代品的值:

import itertools

def bar(lista, listb):
if lista is None:
lista = [None]
if listb is None:
listb = [None]
for a, b in itertools.product(lista, listb):
foo(a, b)
虽然 IMO,如果调用者必须处理传递有效参数给 bar 会更好。 , bar 假设输入总是非无。
还有术语吹毛求疵,在所有情况下, listalistb已定义,它们可以是 None在某些情况下。这与未定义不同。由于您正在谈论函数的参数,因此它们将始终被定义。

关于python - 如何编写一个循环遍历各种形式的可迭代对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63887166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com