繁体   English   中英

使用数学运算在列表中迭代

[英]iteration in list with math operations

我有测试清单

a = [1,2,3,4,5,6,7,8,9,10]

例如,我想将其中一些平方并得到它们的总和。 然后我想将此总和除以2 然后我想提高到1/4的幂

代码是:

result = ((a[0]**2+a[1]**2)/2)**(1/4)

问题是我定义了每个值。 在这个例子中,它a[0]a[1]

我只想获得一些可迭代对象数量的变量(在我的情况下是n = 2

对于n = 3 ,它应该等于:

((a[0]**2+a[1]**2+a[2]**2)/2)**(1/4)

我可以得到这个值

for i in range(3):
    print(a[i])

与 output:

1
2
3

但是我知道如何将它们添加到我的数学运算代码中

这应该这样做:

square=0
for i in range(3):
    square=square+a[i]**2
    if i==2:
        square=(square/2)**(1/4)
print(square)

这将每个数字平方并将其添加到square变量。 如果它在 i 的最后一次迭代,它将square除以 2 并将其提高到 1/4 的幂

您可以创建一个操作字典来执行并将它们应用于您的列表的一部分。 这需要 python 3.7+ 来保证 dict 中规则的插入顺序 == 它们稍后应用的顺序:

a = [1,2,3,4,5,6,7,8,9,10]

# rules
ops = {"square_list" : lambda x: [a**2 for a in x], # creates list
       "sum_list"    : lambda x : sum(x),           # skalar
       "div_2"       : lambda x : x/2,              # skalar
       "**1/4"       : lambda x: x**(1/4)}          # skalar


n_min = 0
for m in range(1,len(a)): 
    # get list part to operate on 
    parts = a [n_min:m]
    print(parts)

    # apply rules
    for o in ops:
        parts = ops[o](parts)

    # print result
    print(parts)

Output:

[1]
0.8408964152537145
[1, 2]
1.2574334296829355
[1, 2, 3]
1.6265765616977856
[1, 2, 3, 4]
1.9679896712654303
[1, 2, 3, 4, 5]
2.2899878254809036
[1, 2, 3, 4, 5, 6]
2.597184780029334
[1, 2, 3, 4, 5, 6, 7]
2.892507608519078
[1, 2, 3, 4, 5, 6, 7, 8]
3.1779718278112656
[1, 2, 3, 4, 5, 6, 7, 8, 9]
3.4550450628484315

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM