2017-04-04 85 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 

應該很容易跟隨雖然有更優雅和張貼在這裏高效的解決方案(取決於你的使用情況 - 的大小列表,您需要執行計算的次數等)。

相關問題