gpt4 book ai didi

python - 将一个列表的元素除以另一个列表的元素

转载 作者:太空狗 更新时间:2023-10-30 02:37:49 31 4
gpt4 key购买 nike

我有两个列表,比方说

a = [10, 20, 30 , 40, 50 , 60] 
b = [30, 70, 110]

如您所见,列表 b 由一个列表的元素总和组成,其中 window = 2:

b[0] = a[0] + a[1] = 10 + 20 = 30 etc.

我怎样才能得到另一个列表,它由给定窗口的列表的 a 元素和 b 元素的分数组成?在我的示例中,我想获取列表:

c = [10/30, 20/30, 30/70, 40/70, 50/110, 60/110]

最佳答案

您可以对这两个任务使用列表推导(创建 bc 列表)

a = [10, 20, 30, 40, 50, 60]

b = [i+j for i, j in zip(a[::2], a[1::2])]
print(b) # [30, 70, 110]

c = [x / b[i//2] for i, x in enumerate(a)]
print(c) # [0.3333333333333333, 0.6666666666666666, 0.42857142857142855, 0.5714285714285714, 0.45454545454545453, 0.5454545454545454]

如果你真的想要分数,你可以使用fractions模块及其 Fraction 数据类型:

from fractions import Fraction

# same code as before

c = [Fraction(x, b[i//2]) for i, x in enumerate(a)]
print(c) # [Fraction(1, 3), Fraction(2, 3), Fraction(3, 7), Fraction(4, 7), Fraction(5, 11), Fraction(6, 11)]

注意事项

作为@LaurentH。在评论中注意到,以上仅适用于大小为 2 的 block (您称它们为 windows)。对于更通用的方法,您可以定义一个生成器来 yield 它们给你:

# taken from https://stackoverflow.com/a/312464/6162307
def yield_chunks(l, n):
"""Yield successive n-sized chunks from l."""
for i in range(0, len(l), n):
yield l[i:i + n]

b = [sum(chunk) for chunk in yield_chunks(a, 2)]
# same code

n = 3 的示例:

n = 3
b = [sum(chunk) for chunk in yield_chunks(a, n)]
print(b) # [60, 150]
c = [x / b[i//n] for i, x in enumerate(a)]
print(c) # [0.16666666666666666, 0.3333333333333333, 0.5, 0.26666666666666666, 0.3333333333333333, 0.4]

关于python - 将一个列表的元素除以另一个列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48990152/

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