вложенные операторы - PullRequest
       5

вложенные операторы

3 голосов
/ 05 января 2012

Я пытаюсь написать понимание списка кортежей, используя операторы в python 2.7, tkinter.Альфа - исходные данные, бета - результат.

alpha=[(A,1,1,2),
(B,2,2,2),
(C,3,1,2)]

product

beta=[(alpha[0],"%.2f"% reduce(mul,alpha[1:])) for alpha in alpha]
beta
[(A,2.00),(B,8.00),(C,6.00)]

sum

beta=[(alpha[0],"%.2f"% reduce(add,alpha[1:])) for alpha in alpha]
beta
[(A,4.00),(B,6.00),(C,6.00)]

Но когда я пытаюсь объединить их для вложенных операцийЯ в тупике.Как я могу получить

сумму продуктов?

beta
[(A,16.00),(B,16.00),(C,16.00)]

продуктов / сумму продуктов?

beta
[(A,0.13),(B,0.44),(C,0.38)]

Я пробовал различные итерации следующего безуспех

beta=[(alpha[0],"%.2f"% reduce(add, map(mul,alpha[1:])) for alpha in alpha]

Ответы [ 2 ]

1 голос
/ 05 января 2012

Вот один из способов сделать это:

In [46]: alpha=[('A',1,1,2),('B',2,2,2),('C',3,1,2)]

In [49]: total = float(sum(reduce(mul,a[1:]) for a in alpha))

In [50]: total
Out[50]: 16.0

In [51]: [(a[0], "%.2f" % (reduce(mul,a[1:])/total)) for a in alpha]
Out[51]: [('A', '0.12'), ('B', '0.50'), ('C', '0.38')]

Я предполагаю, что 0.44 это опечатка. Если это не так, пожалуйста, уточните, как это должно быть вычислено.

0 голосов
/ 05 января 2012

вы можете использовать анонимные функции с помощью Redu:

sum_of_products = [(x[0], float(reduce(lambda y,z: y+z*z, x[1:],0))) for x in alpha]
...