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
虽然这里发布了更优雅、更高效的解决方案(取决于您的用例-列表的大小、您需要执行计算的次数等),但应该很容易理解。谢谢。这真的很有帮助!非常感谢。这真的很有帮助!最后我用了这个。谢谢最后我用了这个。谢谢