簡體   English   中英

Python:在遍歷列表的for循環中,如何乘以該列表的每個其他元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM