如何在python3中设计用于列表循环的生成器

时间:2019-06-19 21:17:13

标签: python-3.x generator

我想将生成器设计为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)还是我们有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

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)])