gpt4 book ai didi

python - 尝试使用两个不同范围的变量来理解 Python 列表

转载 作者:太空狗 更新时间:2023-10-29 17:36:50 26 4
gpt4 key购买 nike

我正在尝试使用大小为 n 和 n/2 的两个不同数组的内容快速生成一个列表。例如:

A = [70, 60, 50, 40, 30, 20, 10, 0]
B = [1, 2, 3, 4]

我希望生成类似的东西

[(A[x], B[y]) for x in range(len(A)) for y in range(len(B))]

我理解第二个 for 语句是“x”语句之后的嵌套 for 循环。我试图让新数组的内容成为

A[0], B[0]
A[1], B[1]
A[2], B[2]
A[3], B[3]
A[4], B[0]
A[5], B[1]
A[6], B[2]
A[7], B[3]

谁能指出我正确的方向?

最佳答案

不要使用嵌套循环;您正在配对 ABB 根据需要重复。你需要的是zip() (进行配对)和 itertools.cycle() (重复 B):

from itertools import cycle

zip(A, cycle(B))

如果 B 的大小总是 A 的一半,您也可以将 B 加倍:

zip(A, B + B)

演示:

>>> from itertools import cycle
>>> A = [70, 60, 50, 40, 30, 20, 10, 0]
>>> B = [1, 2, 3, 4]
>>> zip(A, cycle(B))
[(70, 1), (60, 2), (50, 3), (40, 4), (30, 1), (20, 2), (10, 3), (0, 4)]
>>> zip(A, B + B)
[(70, 1), (60, 2), (50, 3), (40, 4), (30, 1), (20, 2), (10, 3), (0, 4)]

对于不知道哪一个是较长列表的情况,您可以使用 min()max() 来选择循环哪一个:

zip(max((A, B), key=len), cycle(min((A, B), key=len))

或者对于要配对的任意数量的列表,将它们全部循环但使用itertools.islice()限制事物的最大长度:

inputs = (A, B)  # potentially more
max_length = max(len(elem) for elem in inputs)
zip(*(islice(cycle(elem), max_length) for elem in inputs))

演示:

>>> from itertools import islice
>>> inputs = (A, B) # potentially more
>>> max_length = max(len(elem) for elem in inputs)
>>> zip(*(islice(cycle(elem), max_length) for elem in inputs))
[(70, 1), (60, 2), (50, 3), (40, 4), (30, 1), (20, 2), (10, 3), (0, 4)]

关于python - 尝试使用两个不同范围的变量来理解 Python 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35215024/

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