带可选参数的zip()

2024-04-20 05:09:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想迭代可选参数,一个简单的例子:

a = [1,2,3]
b = [4,5,6]
c = {'function':['add','add','multiply']}

for i in zip(a, b, *c):
    if i['function'] == 'add':
        print(i[0] + i[1])
    elif i['function'] == 'multiply':
        print(i[0] * i[1])

这目前不起作用,但我不确定为什么在阅读了这里的*符号之后: https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists

我觉得迭代器应该从I返回2个索引,以及字典中的任何命名值?你知道吗

如何正确实现这个逻辑?你知道吗

更新2019-10-16

谢谢你的回复,但我认为我没有正确地解释我的想法。你知道吗

我的最终目标是迭代字典中的格式值:

labels = ['Car', 'Van', 'Bike']

font_list = {'bold':[True, True, False],
             'italic'=[False, True, True]}

font = {'underline':False}


for i in zip(labels, *font_list):
    if 'bold' in i:
        bold = i['bold']
    else:
        bold = font['bold']
    addLabelToPlot(label=i[0], bold=bold, ...)
    ...

如果每个标签的格式不同,那么它将被放置在font_list字典中,否则它将被放置在font字典中。你知道吗


Tags: inaddfalsetrueforif字典格式
3条回答
a = [1,2,3]
b = [4,5,6]
c = {'function':['add','add','multiply']}
def deee(a,b,function):
    for i in zip(a, b, function):
    if i[2] == 'add':
        print(i[0] + i[1])
    elif i[2] == 'multiply':
        print(i[0] * i[1])
deee(a,b,**c)

你可以这样用

这是因为您的代码在执行

print(list(zip(a, b, *c))

这就产生了:

[(1, 4, 'f'), (2, 5, 'u'), (3, 6, 'n')]

我们只匹配字符串中的第一个字符,但是 如果我们这样做

for i in zip(a, b, c['function']):

我们得到以下输出:

[(1, 4, 'add'), (2, 5, 'add'), (3, 6, 'multiply')]

然后代码可以如下所示:

a = [1, 2, 3]
b = [4, 5, 6]
c = {'function': ['add', 'add', 'multiply']}

for i in zip(a, b, c['function']):
    if i[2] == 'add':
        print(i[0] + i[1])
    elif i[2] == 'multiply':
        print(i[0] * i[1])

对您来说,显式地解压这些值可能更有意义,以便以以下方式读取代码更容易理解,这种方式是获取命名变量,而不必依赖于可能会让人困惑的索引。你知道吗

a = [1, 2, 3]
b = [4, 5, 6]
c = {'function': ['add', 'add', 'multiply']}

for n1, n2, operation in zip(a, b, c['function']):
    if operation == 'add':
        print(n2 + n2)
    elif operation == 'multiply':
        print(n1 * n2)

你应该使用c['function']

 for i in zip(a, b, c['function']):

然后你会用i[2]代替i['function']

a = [1,2,3]
b = [4,5,6]
c = {'function':['add','add','multiply']}

for i in zip(a, b, c['function']):
    if i[2] == 'add':
        print(i[0] + i[1])
    elif i[2] == 'multiply':
        print(i[0] * i[1])

相关问题 更多 >