2024-09-30 22:20:08 发布
网友
例如:
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
为什么这是错误的/我怎样才能快速正确地做这件事?你知道吗
d=iter([iter(range(3)),iter(range(4)),iter(range(5))]) L1z=((x,next(x)) for x in d)
我最初遇到的问题是map计算d中的每个生成器,从而删除整个生成器。你知道吗
这个解决方案把d包裹在另一个发电机里。你知道吗
这是一个相当复杂的方法,我将提供一个更简单的方法。首先,用一个简单的生成器创建d:
d
d= (range(1, i) for i in [3, 4, 5])
然后,在zip_longest和chain.from_iterable的帮助下,为每个具有空列表的范围创建一个zip,以便0的fillvalue可以应用于它:
zip_longest
chain.from_iterable
zip
0
fillvalue
for i in from_it(izip([],i, fillvalue=0) for i in d): print(*i)
重命名一些内容,使其更加紧凑:
from_it = chain.from_iterable izip = zip_longest
最后你会得到:
由此产生:
我最初遇到的问题是map计算d中的每个生成器,从而删除整个生成器。你知道吗
这个解决方案把d包裹在另一个发电机里。你知道吗
这是一个相当复杂的方法,我将提供一个更简单的方法。首先,用一个简单的生成器创建
d
:然后,在
zip_longest
和chain.from_iterable
的帮助下,为每个具有空列表的范围创建一个zip
,以便0
的fillvalue
可以应用于它:重命名一些内容,使其更加紧凑:
最后你会得到:
由此产生:
相关问题 更多 >
编程相关推荐