python 怎么实现按次序引用数组里的数字

python 整个程序一次运行多次运算,其中一个函数第一次运算引用数组里第一个数,第二次运算引用数组里第二的数,怎么实现?
H=[1,2,3,4]
Q=(b**M) * math.log(b)
return (Q)
让M的取值依次取1,2,3,4

这个可以直接使用列表的索引来访问列表中的元素就可以了,使用方式是for循环,代码如下
for i in range(len(H):
M=H[i]
这样就是依次取列表里面的每一个值。此外还可以省略掉M这个中间值,直接使用map方法,更简单,代码如下:
def fun(x):
return (b**x)*math.log(b)
Q=list(map(fun, H))
最后返回的Q就是一个计算结果组成的列表。
不知道这两种方式我说清楚了没有,希望可以帮助到你。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-17
H = [1,2,3,4]

L = map(lambda x: b**x * math.log(b), H)
for result in L:
print(result)
第2个回答  2019-07-17

追问

如图,这个方法的确运行这个函数,会依次输出里面的值,但是我就运行一下,引用了第一个数后就走了。计算完其他的回来引用,引用的仍然是第一个M=next的值。没有引用第二个M=next的值。

运行结果:

1.9

way 1 result:

求和

-1.7973880374849225

2 1.9

。。。。。。。。

1.9

way 1 result:

求和

-1.4219987682935082

2 1.8

追答

大致看了一下你的代码,你应该是每有理解原理

这个函数作用是,简单的通过一个列表生成一个迭代器。

有了迭代器,就可以要去值的时候,next拿一个就可以了。

但是还没有全部拿完,你又重新生成这个迭代器,那迭代的元素就会重新装满。

追问

其实我的目的是:后面有这样一个函数fuzzy( )下图。会运行(2,1.9)(2,1.8)(2,1.7)(3,1.9)(3,1.8)(3,1.7)运行6次,

但是前面的那个函数Q=(b**M)* math.log(b)里面的M是要随着函数fuzzy( )的引用变化而变化的,1.9,1.8,1.7这样变。

所以,有其他方法能实现吗?

这么晚了,谢谢回答!

追答

(b**M) * math.log(b) 在哪个位置引用
你的描述,就算你不会写,你可以用注释标出来,这样别人就知道你要做什么。
比如,你说函数Q=(b**M)* math.log(b)里面的M是要随着函数fuzzy( )变化,但是有没有标函数调用的位置,所以不方便理解

追问

是这样的,在前面一个函数的内部

追答

你这个不对称,
M 变化 是len(H)次
函数调用时len(data)次
逻辑不对吧

追问

简化一下,A=[2,3]里面只放一个数,这样就是fuzzy( )变一次,变一次了。这样也结果也可以用,

追答

我是要知道 fuzzy 函数 和 name1的关系,你给的都是代码片段,看不出逻辑关系

追问

如图,name1是在def normalise_U(U):函数里面的。

而fuzzy 函数 和def normalise_U(U):函数都在最外层,

本回答被提问者采纳