python中带循环的和的和

2024-10-03 23:24:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我整个下午都在试着编写代码。有什么建议吗

有两个列表:Rep是样本1和样本2的复制品,OV是每个复制品的观察值。我需要做的是,对OV中属于样本1的所有值求和,然后将结果平方并除以n,然后对样本2求所有值,最后对两个值求和。(这是方差分析公式“平方和”的第一部分,我还不能上传公式的图片。(

为了测试我的代码,我创建了两个简单的列表:

Rep=[1,1,1,1,1,1,2,2,2,2,2,2]
OV=[1,2,3,4,5,6,7,8,9,10,11,12]

m是样本数,n是每个样本的重复数。 我已经创建了另一个样本编号列表。 这是我的代码尝试

m=2
n=6
sum=0
ObsSum=0
a=0
b=0
Sam=[1,2]

for i in OV:
    if Rep[a]==Sam[b]:
        sum=sum+OV[a]
        a=a+1
        print(i,a,Sam[b],sum) 
        ObsSum=ObsSum + (((sum)**2)/n)
    else:
        b=b+1
        sum=0
print(ObsSum)

这就是我得到的,有一个值,7,第一个对应于样本2,它没有被考虑。 有什么建议吗

1 1 1 1
2 2 1 3
3 3 1 6
4 4 1 10
5 5 1 15
6 6 1 21
8 7 2 7
9 8 2 15
10 9 2 24
11 10 2 34
12 11 2 45
1614.3333333333333

我是Python新手,这是我最好的尝试。 先谢谢你


Tags: 代码列表sam图片建议编号公式样本
3条回答

您可以使用内置的sum函数获取第一个值:

value=sum(n for n in OV if n in Rep)**2/len(OV)

第二部分可以再次使用sum

value2=sum(n-value for n in OV)

然而,你确定这就是你想要的吗?你不是这样计算方差的

使用内置的Sum()函数可以完成所需的操作

它需要两个参数之和(列出\个数,起始\个值)。您可以找到文档和示例代码here

至于bug,总和小于预期的原因实际上不是因为没有考虑7的值,而是因为没有考虑最后一个值(12)。“for i in OV”的工作方式是,它为列表(OV)中的每个对象(在本例中为数字)运行一次下面的代码。按照目前编程解决方案的方式,它使用12次迭代中的一次,跳过if语句并实现else。此跳跃发生在第7个位置。你知道这是真的,因为如果你看你的输出,你正在打印i,它跳过了第7个

6121

<;-缺少i=7。运行代码的else部分,因为if语句 我不满意

8727

还有另一种方法,你可能还没有遇到过。您可以使用与下面类似的代码将列表解析为新列表。因此,使用给定的n信息,可以创建两个样本列表,分别求和。玩玩它,看看什么对你有用

OV = [1,2,3,4,5,6,7,8,9,10,11,12]
n = 6

# Python starts numbering positions at 0 instead of 1
list_of_sample_1 = OV[0:5]
list_of_sample_2 = OV[6:11]

sum_of_sample_1 = sum(list_of_sample_1)
sum_of_sample_2 = sum(list_of_sample_2)

您可以让python自动解析给定值n的列表,如下所示:

OV = [1,2,3,4,5,6,7,8,9,10,11,12]
n = 6

# Python starts numbering positions at 0 instead of 1
list_of_sample_1 = OV[0:n - 1]
list_of_sample_2 = OV[n:11]

sum_of_sample_1 = sum(list_of_sample_1)
sum_of_sample_2 = sum(list_of_sample_2)

只是一些值得思考的东西。祝你的节目好运

代码正在接受该值,但当它接受值7时,条件Rep[a]==Sam[b]为false,然后它直接转到语句b=b+1,并重新开始求和到零

相关问题 更多 >