zip()和可选参数

时间:2019-10-15 10:07:45

标签: python python-3.x zip

我要遍历可选参数,这是一个简单的示例:

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词典中。

3 个答案:

答案 0 :(得分:2)

您应该使用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])

答案 1 :(得分:2)

这是因为您的代码在执行操作时会给出以下内容

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)

答案 2 :(得分:0)

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)

您可以这样使用