alv*_*vas 2 python yield list generator
我有一个函数,产生一个列表的2个部分:
>>> x = [1,2,3,4,5,6]
>>> def fold(ls):
... for i in range(0,2):
... yield x[:i]
... yield x[i:]
...
Run Code Online (Sandbox Code Playgroud)
我知道它仍然作为1生成器返回,尽管函数中有超过1个yield:
>>> fold(x)
<generator object fold at 0x13f9320>
>>> t1, t2 = fold(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
要访问它们,我可以:
>>> for i in fold(x):
... print i
...
[]
[1, 2, 3, 4, 5, 6]
[1]
[2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
我想对这两个执行不同的操作,所以我需要这样的访问:
>>> for i in fold(x):
... t1, t2 = i
... print t1, t2 # because
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ValueError: need more than 0 values to unpack
Run Code Online (Sandbox Code Playgroud)
我可以在收益率的奇数/偶数上使用一些技巧并执行以下操作但是还有其他方法吗?
>>> for i,j in enumerate(fold(x)):
... if i & 0x1:
... print 't1', j
... else:
... print 't2', j
...
t2 []
t1 [1, 2, 3, 4, 5, 6]
t2 [1]
t1 [2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
只是产生一个元组:
yield x[:i], x[i:]
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
for i in fold(x):
t1, t2 = i
Run Code Online (Sandbox Code Playgroud)
甚至更好
for t1, t2 in fold(x):
...
Run Code Online (Sandbox Code Playgroud)
旁注:第一个ValueError来自于您尝试解压缩生成器的事实.无论发电机是什么,如果左侧的变量数量与发电机将产生的项目数量不同,您将始终得到此异常.这是巧合,但你所寻找的可能是这样的:
t1, t2 = list(fold(x))[0]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
998 次 |
| 最近记录: |