将列表元素的产品添加到Python中的现有列表中

时间:2014-09-05 20:52:17

标签: python list iteration

我正在尝试列出一个列表列表(如下所示)

list = [[7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3],
        [3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0],
        [1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6],
        [6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2],
        [7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2, 4]]

计算每个列表的所有元素的乘积,并将结果追加回原始列表。

所以,举例来说,如果我拿上面发布的列表,我希望它看起来像这样:

list_2 = [[5000940,[7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3]],
          [0,[3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0]],
          [0,[1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6]],
          [0,[6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2]],
          [0,[7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2, 4]]]

我到目前为止编写的代码列在列表中,输出产品,但不幸的是我似乎无法将其正确地附加到退出列表中,我希望有人能够告诉我如何这样做。

for i in range(len(list)):
    global products
    products = []
    list_prod = reduce(mul, list[i], 1)
    #products.append(list_prod)
    print products

4 个答案:

答案 0 :(得分:1)

这是一种方法:

from operator import mul
from pprint import pprint

lst = [[7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3],
        [3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0],
        [1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6],
        [6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2],
        [7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2, 4]]

lst[:] = map(lambda e: [reduce(mul, e, 1), e], lst)

pprint(lst)

Online Demo

答案 1 :(得分:1)

list = [[7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3],
        [3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0],
        [1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6],
        [6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2],
        [7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2, 4]]


[[reduce(lambda x, y: x * y, line)] + line for line in list]

给我

[[5000940, 7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3],
 [0, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0],
 [0, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6],
 [0, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2],
 [0, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2, 4]]

答案 2 :(得分:0)

如果使用辅助函数,可能会使事情变得更清楚。

def listprod(lst): return reduce(mul, lst, 1)

print( zip(map(listprod, mylist),mylist) )

如果确实需要,请将元组更改为列表。

答案 3 :(得分:0)

如果你像我一样,并且发现列表推导难以阅读(将来的Esp)。您可能会发现以下代码很有用。另外,避免使用“list”作为变量的名称。作为它的库函数名。

num_list = [[7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3],
    [3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0],
    [1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6],
    [6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2],
    [7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2, 4]]

num_list_fin = []

for num_item in num_list:
    num_item_u = [reduce(lambda x,y: x*y, num_item)]
    num_item_u.append(num_item)
    num_list_fin.append(num_item_u)

print num_list_fin

这会给出输出:

[[5000940, [7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3]], [0, [3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0]], [0, [1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6]], [0, [6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2]], [0, [7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2, 4]]]