[英]Python: In a for loop going through a list, how do you multiply by every other element of that list
首先,如果標題不完整,請您道歉。 我還是編程新手。
假設我有一個質量list = [m1, m2, m3, m4]
: 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
循環一起使用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
最好的方法是實現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
盡管此處發布了更優雅,更有效的解決方案,但應該足夠容易地遵循(取決於您的用例-列表的大小,需要執行計算的次數等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.