显示为列表的列表中列表的乘积

时间:2019-02-19 11:33:40

标签: python list nested-lists

输入参数:接受由数字[[x1,x2,x3,...,xn],[y1,y2,y3,...,ym],...]组成的列表

返回:一个数字列表,其中每个元素是该位置处内部列表的乘积[x1 * x2 * x3 * ... * xn,y1 * y2 * y3 * ... * ym,.. 。]

不能使用附加运算符或其他内置函数。

我不知道如何精确地做到这一点。这是我到目前为止的内容:

def listProducts(x):
    y = 1
    z = 0
    q = 0
    l = ""
    for i in x:
        for j in range(len(i)):
            z = int(i[j])
            y = z * y
            q = y
            l = str(q) + l
    l = list(l)
    return l

a = [[1],[2,3,4],[10,10,10,10]]
print(listProducts(a))

我无法在网上找到有关它的任何信息。而且我不应该使用任何内置函数,例如numpy或list运算符。只需像上面所示的list()这样的循环和转换即可。

5 个答案:

答案 0 :(得分:3)

一种方法可能是使用列表理解,然后使用functools.reduce将子列表中的所有元素相乘,在其中您可以将子列表中的所有元素与operator.mul相乘

a = [[1],[2,3,4],[10,10,10,10]]

from operator import mul
from functools import reduce

[reduce(mul,i) for i in a]
# [1, 24, 10000]

对于没有导入的解决方案,您可以执行以下操作:

l = [1 for i in range(len(a))]
for ix, i in enumerate(a):
    for j in i:
        l[ix] *= j

print(l)
# [1, 24, 10000]

答案 1 :(得分:1)

您可以使用reduce方法来获得列表乘法的结果。并使用列表理解来遍历列表。

from functools import reduce
a = [[1],[2,3,4],[10,10,10,10]]
a = [reduce(lambda x, y: x*y, i) for i in a]
print(a)

答案 2 :(得分:1)

尝试一下:

def listProducts(x):
y = 1
l = [0]*len(x)
for i in range(len(x)):
    for j in range(len(x[i])):
        z = int(x[i][j])
        y = z * y
    l[i] = y
return l

答案 3 :(得分:0)

您可以简单地做:

inputlist=[[1,2,3],[4,5,6,7],[8,9,8,7,6]]
outputlist=[]
for each in inputlist:
    result=1
    for EACH in each:
        result=result*EACH
    outputlist.append(result)
print(outputlist)

提供输出:

[6, 840, 24192]

答案 4 :(得分:0)

简单的解决方案,无需使用外部库和列表操作

a = [[1],[2,3,4],[10,10,10,10]]


len_a= len(a)
new_list = [0]*len_a
product = 1
for i in range(len(a)):
    for j in range(len(a[i])):
        product *= a[i][j]
    new_list[i] = product 
    product = 1

print(new_list)

# output [1, 24, 10000]