【问题标题】:how to design a generator for list loop in python3 [duplicate]如何在python3中为列表循环设计生成器[重复]
【发布时间】:2019-11-02 16:23:54
【问题描述】:

我想设计一个生成器为gen(num):

这个想法是生成一个数字序列。例如如果num=3,则序列将为(1,2,3,2,1,2,3,2,1.....)。如果num=4,则序列为(1,2,3,4,3,2,1,2,3,4,3,2,1,....)

def gen(num)

以及如何在 for 循环中使用这个生成器?

比如

a = [1,2,3,4,5]
b = gen(10)
for item in a:
    a+next(b)

最好使用next(b) 还是我们有更好的解决方案?

【问题讨论】:

  • 序列是否遵循某种模式?另外,序列的最大长度是多少?

标签: python-3.x generator


【解决方案1】:
def gen(n):
    c, i = 1, -1
    while True:
        if c in (1, n):
            i *= -1
        yield c
        c += i

a = [1,2,3,4,5,6,7,8,9,10]
b = gen(3)
for va, vb in zip(a, b):
    print('{}\t{}\t{}'.format(va, vb, va + vb))

打印:

1   1   2
2   2   4
3   3   6
4   2   6
5   1   6
6   2   8
7   3   10
8   2   10
9   1   10
10  2   12

更新:带有itertools.cycle的生成器版本:

from itertools import cycle

gen = lambda n: cycle([*range(1, n+1)] + [*range(n-1, 1, -1)])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 2016-06-06
    • 2018-12-01
    • 2017-04-26
    • 2020-05-19
    • 2023-03-08
    • 2020-08-07
    • 1970-01-01
    相关资源
    最近更新 更多