Это потому, что ваш код дает следующее при выполнении
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)