Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于python中的循环以查找列表的和_Python_Loops - Fatal编程技术网

用于python中的循环以查找列表的和

用于python中的循环以查找列表的和,python,loops,Python,Loops,我有一个关于python中列表的问题。目前我有一些代码如下所示: muaverage = (w[0] * mu[0] + w[1] * mu[1]) 其中w和mu都是包含2个变量的列表。 虽然w和mu只包含两个变量,但代码运行良好,但是我想在这些列表中添加更多值,为此,遍历列表以找到总和似乎是最合适的。我尝试了以下几点 for i in range(0,len(mu)): muaverage = sum(w[i] * mu[i]) 但这显示了一个错误。任何建议都将不胜感激 您的代码有

我有一个关于python中列表的问题。目前我有一些代码如下所示:

muaverage = (w[0] * mu[0] + w[1] * mu[1])
其中w和mu都是包含2个变量的列表。 虽然w和mu只包含两个变量,但代码运行良好,但是我想在这些列表中添加更多值,为此,遍历列表以找到总和似乎是最合适的。我尝试了以下几点

for i in range(0,len(mu)):
    muaverage = sum(w[i] * mu[i])

但这显示了一个错误。任何建议都将不胜感激

您的代码有两个问题:

  • 在每次迭代中,您将覆盖先前的
    muaverage
  • 您正在尝试获取单个数值的
相反,您可以使用常规的
for
循环:

muaverage = 0                  # initialize before the loop
for i in range(0,len(mu)):
    muaverage += w[i] * mu[i]  # add to current value with +=
或者将
sum
与生成器表达式一起使用:

muaverage = sum(w[i] * mu[i] for i in range(len(mu)))
sum
zip
,如下所示:

然而,请注意,
muaverage
并非真正的平均值;为此,您仍然需要将其除以元素数,或加权平均值的权重(?)之和。

您似乎在寻找
mu
w
之间的(内部)点积。 要自己实现这一点,只需参考@tobias_k答案。但是,在Python中数字数组的标准包(即NumPy)中,函数
dot()
或运算符
@
(在Python中>=3.5)将执行您要求的操作,即(内部)点积

import numpy as np

# define some dummy objects
mu = list(range(0, 10))
w = list(range(10, 20))

muaverage = sum(x * y for x, y in zip(mu, w))
# muaverage == 735

muaverage = np.dot(mu, w)
# muaverage == 735

# operands of `@` should be `numpy.array()`
mu = np.array(mu)
w = np.array(w)
muaverage = mu @ w
# muaverage == 735
但您的命名表明,您可能在加权平均数之后,为此您将使用
average()
,它接受
weight
参数,例如

import numpy as np

# define some dummy objects
mu = list(range(0, 10))
w = list(range(10, 20))

muaverage = np.average(mu, weights=w)
# muaverage == 5.068965517241379

muaverage = np.dot(mu, w) / np.sum(w)
# muaverage == 5.068965517241379

(经过编辑以更好地包含
np.dot()
)。

求和(i*j表示i,j在zip(w,m)中))
?您能告诉我您遇到了什么错误吗?错误显示对象“float”不可编辑!循环的问题是在每次迭代中都覆盖了以前的值。此外,您正在尝试获取单个整数的和。另外,这不是平均值。
numpy.dot()
也可以。也许,我们需要的是一个加权平均值,你可以用它除以权重之和。类似地,
numpy.average()
接受了一个
weight
参数,正是因为这个参数。@norok2很好,这很有意义,特别是当第二个数组被称为
w
时。你为什么不把它作为另一个答案呢?另一个只是为了好玩的想法
sum(星图(lambda x,y:x*y,zip(w,mu))
@yatu你肯定是指
sum(itertools.starmap(operator.mul,zip(w,mu))
?这是另一个问题@j_abrams。我建议你为这个问题提出一个正确的新问题,你肯定会得到一些帮助
import numpy as np

# define some dummy objects
mu = list(range(0, 10))
w = list(range(10, 20))

muaverage = np.average(mu, weights=w)
# muaverage == 5.068965517241379

muaverage = np.dot(mu, w) / np.sum(w)
# muaverage == 5.068965517241379