带有可迭代和函数的functon,返回一个字符串

时间:2016-10-27 21:27:38

标签: python iterable

def start_when(iterable,p):
    s = ''
    a = ''
    x = iter(iterable)
    for y in x:
        a = a + y
    try: 
        for y in x:
            if p(y) == True:
                s = s + a[a.index(y):]   
                break       
    except StopIteration:
        pass
    return s

start_when生成器将iterable和谓词作为参数:它从iterable中生成每个值,从谓词返回True的第一个值开始

例如:

for i in start_when('combustible', lambda x : x >= 'q’):
    print(i,end='')

打印

ustible

然而,当我的函数接受输入

('abcdefghijk', lambda x : x >='d')])

它应该返回

defghijk

但它没有返回任何内容

下面是我得到的错误:

21 *Error: ''.join([str(v) for v in start_when('abcdefghijk', lambda x : x >='d')]) ->  but should -> defghijk
22 *Error: ''.join([str(v) for v in start_when(hide('abcdefghijk'), lambda x : x >='d')]) ->  but should -> defghijk
23 *Error: ''.join([str(v) for v in start_when(hide('abcdefghijk'), lambda x : x >'f')]) ->  but should -> ghijk

有人可以帮助我修复我的功能吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

那么你的方法根本不是一个生成器方法。以下生成器方法将完美地为您服务:

def start_when(iterable,p):
    x=iter(iterable)
    for y in x:
        if p(y):
            yield y
            break
    for y in x:
        yield y

并将其称为:

for i in start_when('abcdefghijk', lambda x : x >='d'):
    print(i,end='')