2
使用耐心排序计算最长的递增子序列我创建了一个(值,反向链接)对的嵌套元组,然后我需要爬取才能获得所有的值。 目前我使用一个小功能来做到这一点,但想知道是否有一种方法来使用列表解析来做同样的事情。使用列表理解从嵌套Python数据结构中获取值列表?
该示例使用namedtuple在我原来的计划,并应说明我的问题:
>>> from collections import namedtuple
>>> P = namedtuple('P', 'val, back')
>>> q = P(val=15, back=P(val=11, back=P(val=9, back=P(val=6, back=P(val=2, back=P(val=0, back=None))))))
>>> q
P(val=15, back=P(val=11, back=P(val=9, back=P(val=6, back=P(val=2, back=P(val=0, back=None))))))
>>> #Request something like:
>>> [val for val, q in q]
Traceback (most recent call last):
File "<pyshell#68>", line 1, in <module>
[val for val, q in q]
File "<pyshell#68>", line 1, in <listcomp>
[val for val, q in q]
TypeError: 'int' object is not iterable
>>> q
P(val=15, back=P(val=11, back=P(val=9, back=P(val=6, back=P(val=2, back=P(val=0, back=None))))))
>>> # Wanted: [15, 11, 9, 6, 2, 0]
>>>
>>> # Have to use:
>>> def _unwind(q):
u = []
while q:
u.append(q.val)
q = q.back
return u
>>> q
P(val=15, back=P(val=11, back=P(val=9, back=P(val=6, back=P(val=2, back=P(val=0, back=None))))))
>>> _unwind(q)
[15, 11, 9, 6, 2, 0]
>>>
我一直在寻找的设定压力,所以我可以写类似的一些方法:
[val for val, q in q]
也许通过重写P____ iter__和P____ next__以某种方式优雅地重新定义P的iter协议?