首先,道歉如果标题不完全有意义。我对编程还很陌生。Python:在循环遍历一个列表中,你如何乘以该列表的每个其他元素
说我有群众的列表:list = [m1, m2, m3, m4]
我想每个质量使用for循环乘以群众的其余部分的总和。 即
for i in list:
#code here to yield
#m1*m2 + m1*m3 + m1*m4
#m2*m1 + ..... etc
我怎么会去这样做呢? 谢谢。
首先,道歉如果标题不完全有意义。我对编程还很陌生。Python:在循环遍历一个列表中,你如何乘以该列表的每个其他元素
说我有群众的列表:list = [m1, m2, m3, m4]
我想每个质量使用for循环乘以群众的其余部分的总和。 即
for i in list:
#code here to yield
#m1*m2 + m1*m3 + m1*m4
#m2*m1 + ..... etc
我怎么会去这样做呢? 谢谢。
天真,你就需要跟踪回路中的电流指标,以便在乘以其他元素时知道跳过哪个元素。这可以通过range(len(list))
或enumerate(list)
上的循环来完成。
但是,如果列表很大,还有一种更清晰的方式,它的执行速度也会更快。而不是乘以所有其他元素并加起来的产品,乘以总和的全部的元素,减去当前元素。你可以计算所有元素的总和前面,避免了很多不必要的重复劳动:
l = [m1, m2, m3, m4]
# Outside the loop - this is important.
lsum = sum(l)
for i in l:
do_whatever_with(i * (lsum - i))
您可以使用sum
功能与for
环路沿:
my_list = [1, 2, 3, 4] # actual numbers for showing working code
for i, n in enumerate(my_list):
print sum(n*j for j in my_list[:i]+my_list[i+1:])
,它将打印结果为:
9
16
21
24
谢谢。这真的很有帮助! – JC598
要做到这一点,最好的办法是要认识到m2*m1+m2*m3+m2*m4 == m2*(m1+m3+m4)
,所以你可以简单:
for i in range(len(mylist)):
sum_i = mylist[i]*sum(mylist[:i]+mylist[i+1:])
一个简单的方法来做到这一点:
for i, mass_i in enumerate(my_list):
sum = 0
for j, mass_j in enumerate(my_list):
if i != j:
sum += mass_i * mass_j
print sum
应该很容易跟随虽然有更优雅和张贴在这里高效的解决方案(取决于你的使用情况 - 的大小列表,您需要执行计算的次数等)。
我结束了使用这个。谢谢! – JC598