首页 > 解决方案 > 使用数学运算在列表中迭代

问题描述

我有测试清单

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])

输出:

1
2
3

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

标签: pythonmath

解决方案


您可以创建一个操作字典来执行并将它们应用于您的列表的一部分。这需要 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)

输出:

[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

推荐阅读