2017-04-04 48 views

回答

3

天真,你就需要跟踪回路中的电流指标,以便在乘以其他元素时知道跳过哪个元素。这可以通过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)) 
+0

我结束了使用这个。谢谢! – JC598

0

您可以使用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 
+0

谢谢。这真的很有帮助! – JC598

0

要做到这一点,最好的办法是要认识到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:]) 
0

一个简单的方法来做到这一点:

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 

应该很容易跟随虽然有更优雅和张贴在这里高效的解决方案(取决于你的使用情况 - 的大小列表,您需要执行计算的次数等)。

相关问题