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]