Сер*_*лов 6 python list-comprehension
我正在寻找列表理解,并看到smth奇怪.码:
a = ['a', 'a', 'a', 'b', 'd', 'd', 'c', 'c', 'c']
print [(len(list(g)), k) if len(list(g)) > 1 else k for k, g in groupby(a)]
Run Code Online (Sandbox Code Playgroud)
结果:
[(0, 'a'), 'b', (0, 'd'), (0, 'c')]
但我想看到:
[(3, 'a'), 'b', (2, 'd'), (3, 'c')]
这种行为的原因是什么?
Tig*_*kT3 12
当你调用list()一个itertools._grouper物体时,你就会耗尽这个物体.由于您执行此操作两次,因此第二个实例的长度为0.
第一:
if len(list(g))
Run Code Online (Sandbox Code Playgroud)
现在已经筋疲力尽了.然后:
(len(list(g)), k))
Run Code Online (Sandbox Code Playgroud)
它的长度为0.
您可以在理解中嵌套生成器/理解list以耗尽对象并在处理之前保存相关数据:
>>> [(y,x) if y>1 else x for x,y in ((k, len(list(g))) for k, g in groupby(a))]
[(3, 'a'), 'b', (2, 'd'), (3, 'c')]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |