Python:在遍历列表的for循环中,如何乘以该列表中的其他元素

Python:在遍历列表的for循环中,如何乘以该列表中的其他元素,python,Python,首先,如果标题没有完全意义,请道歉。我还是个编程新手 假设我有一个质量列表:list=[m1,m2,m3,m4] 我想用for循环得到每个质量的和乘以其他质量。 i、 e 我该怎么做呢? 谢谢。您可以将求和功能与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=[m1,m2,m3,m4]

我想用for循环得到每个质量的和乘以其他质量。 i、 e

我该怎么做呢?
谢谢。

您可以将
求和功能与
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

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

天真地说,您需要跟踪循环中的当前索引,以知道在与其他元素相乘时跳过哪个元素。这可以通过循环
范围(len(list))
枚举(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))

天真地说,您需要跟踪循环中的当前索引,以知道在与其他元素相乘时跳过哪个元素。这可以通过循环
范围(len(list))
枚举(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))

最好的方法是认识到
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:])

最好的方法是认识到
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

尽管这里发布了更优雅、更高效的解决方案(取决于您的用例-列表的大小、您需要执行计算的次数等),但应该很容易遵循。

一种简单的方法:

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

虽然这里发布了更优雅、更高效的解决方案(取决于您的用例-列表的大小、您需要执行计算的次数等),但应该很容易理解。

谢谢。这真的很有帮助!非常感谢。这真的很有帮助!最后我用了这个。谢谢最后我用了这个。谢谢