我要遍历可选参数,这是一个简单的示例:
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个索引,以及字典中的任何命名值?
如何正确实现此逻辑?
感谢您的所有答复,但我认为我没有正确解释我的想法。
我的最终目标是从字典中迭代格式值:
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
词典中。
答案 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)
您可以这样使用