如何将迭代器压缩到(迭代器[1:],迭代器[0])类型结构中?

2024-09-30 22:20:08 发布

您现在位置:Python中文网/ 问答频道 /正文

例如:

d=iter([iter(range(3)),iter(range(4)),iter(range(5))])
L1z=zip(d,map(lambda x: next(x),d))
for ran,first in L1z:
    for i in ran:
        print(first,i)

此代码打印出来:

0 0    
0 1    
0 2

但我希望它能打印出来:

0 1    
0 2    
0 1    
0 2    
0 3    
0 1    
0 2    
0 3    
0 4

为什么这是错误的/我怎样才能快速正确地做这件事?你知道吗


Tags: lambda代码inmapfor错误rangezip
2条回答
d=iter([iter(range(3)),iter(range(4)),iter(range(5))])
L1z=((x,next(x)) for x in d)

我最初遇到的问题是map计算d中的每个生成器,从而删除整个生成器。你知道吗

这个解决方案把d包裹在另一个发电机里。你知道吗

这是一个相当复杂的方法,我将提供一个更简单的方法。首先,用一个简单的生成器创建d

d= (range(1, i) for i in [3, 4, 5])

然后,在zip_longestchain.from_iterable的帮助下,为每个具有空列表的范围创建一个zip,以便0fillvalue可以应用于它:

for i in from_it(izip([],i, fillvalue=0) for i in d):
    print(*i)

重命名一些内容,使其更加紧凑:

from_it = chain.from_iterable    
izip = zip_longest

最后你会得到:

for i in from_it(izip([],i, fillvalue=0) for i in d):
    print(*i)

由此产生:

0 1
0 2
0 1
0 2
0 3
0 1
0 2
0 3
0 4

相关问题 更多 >