gpt4 book ai didi

python - 遍历列表并使用之前的元素

转载 作者:太空宇宙 更新时间:2023-11-04 09:10:07 24 4
gpt4 key购买 nike

我有一个包含十进制数字的列表,但是在这个例子中我使用了整数:

my_list = [40, 60, 100, 240, ...]

我想以相反的顺序打印列表中的每个元素,然后我想打印第二行,其中每个值除以 2,然后是第三行,其中前一个 int 除以 3,依此类推......

输出应该是:

240     120     60     36
120 60 30 18 #previous number divided by 2
40 20 10 6 #previous number divided by 3
... ... ... ... #previous number divided by 4 ...

我的解决方案很丑陋:我可以制作一个切片并反转该列表,制作 n 个 for 循环并将结果附加到一个新列表中。但必须有更好的方法。你会怎么做?

最佳答案

我会编写一个生成器来依次生成列表:

def divider(lst,n):
lst = [float(x) for x in lst[::-1]]
for i in range(1,n+1):
lst = [x/i for x in lst]
yield lst

更合适。如果我们想让它稍微更有效率,我们可以分解出第一次迭代(除以 1)并单独产生它:

def divider(lst,n):
lst = [float(x) for x in reversed(lst)]
yield lst
for i in range(2,n+1):
lst = [x/i for x in lst]
yield lst

*请注意,在这种情况下,lst[::-1]reversed(lst) 之间并没有太多区别。前者通常稍快一些,但后者的内存效率更高一些。根据您的限制进行选择。


演示:

>>> def divider(lst,n):
... lst = [float(x) for x in reversed(lst)]
... yield lst
... for i in range(2,n+1):
... lst = [x/i for x in lst]
... yield lst
...
>>> for lst in divider([40, 60, 100, 240],3):
... print lst
...
[240.0, 100.0, 60.0, 40.0]
[120.0, 50.0, 30.0, 20.0]
[40.0, 16.666666666666668, 10.0, 6.666666666666667]

关于python - 遍历列表并使用之前的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16318833/

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