首先,道歉如果標題不完全有意義。我對編程還很陌生。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