Python 如何在列表列表中查找每行的乘积?
假设我有一个列表:Python 如何在列表列表中查找每行的乘积?,python,Python,假设我有一个列表: list = [[2, 4, 3, 8], [5, 6, 4, 3], [1, 9, 5, 7], [8, 3, 1, 2]] 我要做的是得到每一行和每一列的乘积,而不是重复 所以我会得到第1行和第2行的乘积(2*5,4*6,3*4,8*3),然后是第1行和第3行的乘积(2*1,4*9,3*5,8*7),然后是第1行和第4行的乘积(2*8,4*3,3*1,8*2) 第1行完成后,转到第2行,得到第2行和第3行的乘积(5*1
list = [[2, 4, 3, 8],
[5, 6, 4, 3],
[1, 9, 5, 7],
[8, 3, 1, 2]]
我要做的是得到每一行和每一列的乘积,而不是重复
所以我会得到第1行和第2行的乘积(2*5,4*6,3*4,8*3),然后是第1行和第3行的乘积(2*1,4*9,3*5,8*7),然后是第1行和第4行的乘积(2*8,4*3,3*1,8*2)
第1行完成后,转到第2行,得到第2行和第3行的乘积(5*1、6*9、4*5、3*7),然后是第2行和第4行的乘积(5*8、6*3、4*1、3*2)
最后,我们做第3行和第4行(1*8,9*3,5*1,7*2)
我试图弄清楚如何使用循环来实现这一点,但我似乎无法弄清楚 您可以尝试类似的方法(如果您使用的是Python3,则Python2.7将
xrange
替换为range
)
>>> zip(*(tuple(x * y for x, y in itertools.combinations(row, 2)) for row in zip(*LL)))
[(10, 24, 12, 24), (2, 36, 15, 56), (16, 12, 3, 16), (5, 54, 20, 21), (40, 18, 4, 6), (8, 27, 5, 14)]
您可以使用
numpy
和itertools。组合
:
import numpy as np
from itertools import combinations
>>> [np.array(i)*j for i,j in combinations(li,2)]
[array([10, 24, 12, 24]), array([ 2, 36, 15, 56]), array([16, 12, 3, 16]), array([ 5, 54, 20, 21]), array([40, 18, 4, 6]), array([ 8, 27, 5, 14])]
>>>
不导入任何模块的显式解决方案是
[[x*y for x, y in zip(rowx, rowy)]
for ix, rowx in enumerate(L)
for rowy in L[ix+1:]]
当然,它有三个“循环”,一个用于两行的乘积,两个嵌套的循环用于获得不同行的所有可能配对
它们是列表理解循环,但仍然是循环
PS:不要在Python代码中调用列表list
。这将隐藏系统类型的名称,并(严重地)让程序员感到惊讶。尝试以下方法:
即使其他解决方案也很好,但如果你是初学者,这将是一个很大的帮助
from itertools import izip #faster than zip
from operator import mul
my_list=[[2, 4, 3, 8],
[5, 6, 4, 3],
[1, 9, 5, 7],
[8, 3, 1, 2]]
final_list=[]
for n,i in izip(*my_list):
final_list.append(reduce(mul,i,1))
print final_list
很高兴看到一个gimme codez问题出现这样的结果。这就是为什么我坚持回答没有一个理智的教授会认为来自学生的答案。如果他们这样做了,那么我就埋下了一颗滴答作响的定时炸弹,几十年后会爆炸,导致学生因压力而死亡。
from itertools import izip #faster than zip
from operator import mul
my_list=[[2, 4, 3, 8],
[5, 6, 4, 3],
[1, 9, 5, 7],
[8, 3, 1, 2]]
final_list=[]
for n,i in izip(*my_list):
final_list.append(reduce(mul,i,1))
print final_list