Python 在非零的嵌套列表中查找产品

Python 在非零的嵌套列表中查找产品,python,Python,如何获取嵌套列表的产品: [[-1, 3, 1],[6, 1, 2],[4, 3, 1],[0, 1, 1]] 致: 式中,例如:-1*3*1=-3,依此类推 这是我当前的解决方案: for i in range(len(array2)): for j in range(len(array2[i])): prod = array2[i][j] * array2[i][j + 1] * array2[i][j + 2] print(prod) 我得到以

如何获取嵌套列表的产品:

[[-1, 3, 1],[6, 1, 2],[4, 3, 1],[0, 1, 1]]
致:

式中,例如:-1*3*1=-3,依此类推

这是我当前的解决方案:

for i in range(len(array2)):
    for j in range(len(array2[i])):
        prod = array2[i][j] * array2[i][j + 1] * array2[i][j + 2] 
        print(prod)
我得到以下错误:

索引器:列表索引超出范围


当你得到j+1和j+2时,你的指数超出界限,正确的方法是停在len-2

array2 = [[-1, 3, 1], 
           [6, 1, 2],
           [4, 3, 1],
           [0, 1, 1]]


for i in range(len(array2)):
    for j in range(len(array2[i])-2): # Check here the range
        prod = array2[i][j] * array2[i][j + 1] * array2[i][j + 2] 
        print(prod)

在内部循环中,您正在遍历完整的内部列表。这意味着,一旦到达内部列表的最后一个元素,您将尝试将其乘以下面的数字和后面的数字,这些数字不存在

除此之外,您的代码将尝试生成与每个列表中的元素一样多的产品,但由于我刚才所说的,您的代码将失败

一种可能的解决办法是:

  for i in range(len(array2)):
      prod = array2[i][0] * array2[i][1] * array2[i][2] 
      print(prod)
[reduce(mul, filter(None, s)) for s in l]
# [-3, 12, 12, 1]
但该代码只适用于3元素的内部列表。如果要使用可变长度的列表,请执行以下操作:

  for i in range(len(array2)):
      prod = 1
      for j in range(len(array2[i])):
         prod *= array2[i][j]
      print(prod)
或者您可以直接迭代列表中的元素:

for list in array2:
  prod = 1
  for num in list:
     prod *= num
  print(prod)

请尝试以下功能:

input_list=[[-1,3,1],[6,1,2],[4,3,1],[0,1,1]

def计算乘法(嵌套列表):
对于嵌套列表中的l:
res=1
对于l中的元素:
res*=元素
打印(res)

最后一行是:

计算乘法(输入列表)

这将提供以下输出:

-三,

十二,

十二,

0

您可以查看与的组合,以使其简短、清晰,并完全避免索引(这通常是小错误的来源):

根据评论进行编辑

如果您想忽略零,您可以简单地过滤掉它们(这假设您没有全零的行,在这种情况下,不清楚答案是什么):

解决方案使用:

导入numpy
矩阵=[
[-1, 3, 1],
[6, 1, 2],
[4, 3, 1],
[0, 1, 1]
]
对于矩阵中的行:
prod=numpy.prod(行)
打印(产品)

假设每行只有三个条目:列表理解就足够了。将每行中的每一项乘以另一项:

matrix = [
    [-1, 3, 1],
    [6, 1, 2],
    [4, 3, 1],
    [0, 1, 1]
]
首先,设置一个条件将零值更改为1(这是基于忽略0且仅返回非零结果的条件)

将每个条目乘以另一个条目

res = [start*middle*end for start,middle,end in filtered]

#[-3, 12, 12, 1]

如果条目数超过三个,则@mark meyer的解决方案适用于此

嵌套列表是否总是有三个元素?我的意思是在一般情况下是N乘以3吗?你能更具体一点吗?您从该错误消息中了解/不了解什么?为什么最后的结果是
1
而不是
0
?忘记提到如果产品返回0,它应该忽略0。并且只得到非零的乘积@patrickhaugh如果你要使用Numpy,不要写循环(这样会破坏目的),只需传递轴:
Numpy.prod(matrix,axis=1)
是的,绝对忘了提到如果产品返回0,它应该忽略0。并且只得到非零的乘积,忘记了如果乘积返回0,它应该忽略0。请不要只发布代码作为答案,还要解释代码的作用以及它是如何解决问题的。带有解释的答案通常质量更高,更容易吸引选票。
my_list = [[-1,3,1],[6,1,2],[4,3,1],[0,1,1]]
products = []
for sub_list in my_list:
  partial_prod = 1      
  for item in sub_list:
    partial_prod = partial_prod * item
  products.append(partial_prod)
matrix = [
    [-1, 3, 1],
    [6, 1, 2],
    [4, 3, 1],
    [0, 1, 1]
]
filtered = [[ent if ent!= 0 else 1 for ent in row  ] for row in matrix] 
res = [start*middle*end for start,middle,end in filtered]

#[-3, 12, 12, 1]