gpt4 book ai didi

python - 如何在依赖于两个变量的函数中仅对一个变量使用 'for' 循环?

转载 作者:太空狗 更新时间:2023-10-29 22:00:09 25 4
gpt4 key购买 nike

我只想在我的函数中为 t 变量使用 for 循环:

l = []

def func(s):
for i in range(1, 100):
t = i
p = t * 2 + s * 2
return p

l.append(func(10))

print l

我希望 t 的值从 1 到 99,并打印所有值的列表,但我总是得到 l = [218]

最佳答案

我假设你有 NumPy安装(至少你原来的问题建议它),所以我将介绍一种方法如何以非常有效的方式使用 numpy-arrays 获得结果(没有任何列表理解和显式迭代) :

> import numpy as np
> s = 10
> l = np.arange(1, 100) * 2 + s * 2 # Arrange produces an array. Syntax is like "range".
> print(l)

array([ 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46,
48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72,
74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98,
100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124,
126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150,
152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176,
178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202,
204, 206, 208, 210, 212, 214, 216, 218])

我使用了 NumPy 数组上的数学运算会影响所有元素这一事实。因此很容易编写操作:np.arange(1, 100) * 2,因为它将每个元素与 2numpy.arange 相乘可以创建一个数组,其中包含给定 startstop 之间的所有数字,并带有可选的 step (就像 python range ) .

对于 NumPy,append 单个值不是一个好的选择(因为这会重新创建整个数组,而不仅仅是附加值)。在大多数情况下,最好创建一个具有最终大小和形状的数组并直接对其进行操作。当然可以concatenateappend不同的 NumPy 数组,但如前所述,它总是创建一个全新的数组,因此效率不高(如果经常使用)。


现在对您的初始尝试进行一些观察以及为什么它不起作用:您的函数创建了很多数字,但它在每个循环中覆盖了它们并且只返回最后一个:

def func(s):
for i in range(1, 100):
t = i
p = t * 2 + s * 2
# Next iteration of the loop just overwrites p
# Returns only the last p
return p

你可以把它变成一个生成器(用 yield 而不是 return),但这可能有点矫枉过正,不过我还是会展示它:-)

l = []
def func(s):
for i in range(1, 100):
p = i * 2 + s * 2
yield p

l.append(list(func(10))) # Need to convert the generator to a list here.
# In this case a simple "l = list(func(10))" would be easier if you don't need to append.

关于python - 如何在依赖于两个变量的函数中仅对一个变量使用 'for' 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36096915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com