在next()中使用yield

时间:2018-10-23 19:08:17

标签: python python-3.x

我正在尝试生成一个将列表中的每个项目与文件的每一行连接起来的生成器。

我的文件/tmp/list包含:

foo
bar

我的代码是:

mylist = [
    'hello',
    'world'
]

def _gen():
    for x in mylist:
        with open('/tmp/list') as fh:
            yield('-'.join([x, next(fh)]))


for i in _gen():
    print(i)

我得到的输出是:

hello-foo
world-foo

我的目标是:

hello-foo
hello-bar
world-foo
world-bar

1 个答案:

答案 0 :(得分:2)

您只有一个外部循环,您只需使用next来抓取文件的 first 行。但是您也要遍历fh-即应该有两个循环。

for x in mylist:
    with open('/tmp/list') as fh:
        for line in fh:
            yield '-'.join([x, line.strip()])