跳过生成器函数中的值

nit*_*tin 6 python generator

我正在编写一个生成器函数,它给我字母字符,就像这样,

def gen_alphaLabels():
    a = range(65,91)
    for i in a:
        yield chr(i)

k = gen_alphaLabels()
for i in range(26):
    print k.next(),
Run Code Online (Sandbox Code Playgroud)

这会产生,

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Run Code Online (Sandbox Code Playgroud)

这有效......

我希望函数跳过donotInclude列表中的一些字符.我可以这样做是在发电机外面,像这样,

k = gen_alphaLabels()
donotInclude = ['D','K','J']
for i in range(26):
    r = k.next()
    if r not in donotInclude:
        print r,
Run Code Online (Sandbox Code Playgroud)

这产生了跳过'D','K'和'J'的理想结果

A B C E F G H I L M N O P Q R S T U V W X Y Z
Run Code Online (Sandbox Code Playgroud)

有没有办法包括跳过生成器函数中字符的逻辑?有些事情沿袭

def gen_alphaLabels():
    a = range(65,91)
    for i in a:
        r = chr(i)
        if r in donotInclude:
            yield self.next()
        else: 
            yield r
Run Code Online (Sandbox Code Playgroud)

Ric*_*kyA 7

continue 救援:

def gen_alphaLabels():
    a = range(65,91)
    for i in a:
        r = chr(i)
        if r in donotInclude:
            continue
        yield r
Run Code Online (Sandbox Code Playgroud)


Joo*_*wan 7

不使用continue +稍微缩短代码:

def gen_alphaLabels(donotInclude):
    for i in range(65,91):
        char = chr(i)
        if char not in donotInclude:
            yield char
Run Code Online (Sandbox Code Playgroud)

  • 这应该是对RickyA答案的编辑,而不是新答案. (2认同)
  • @Bonifacio2嗯,我认为答案的差异足以保证自己的位置.只是一个意见问题. (2认同)