Skip to main content
 首页 » 编程设计

python之如何使用列表推导式遍历链表

2025年05月04日10dflying

我一直在尝试寻找一种使用列表表达式来遍历链表等层次结构的方法,但还没有想出任何似乎可行的方法。

基本上,我想转换这段代码:

p = self.parent 
names = [] 
while p: 
  names.append(p.name) 
  p = p.parent 
print ".".join(names) 

像这样的一行:

print ".".join( [o.name for o in <???>] ) 

不过,我不确定如何在 ??? 部分进行遍历,以通用方式(如果可能的话)。我有几个具有类似 .parent 类型属性的结构,并且不想为每个结构编写一个生成函数。

编辑:

我不能使用对象本身的 __iter__ 方法,因为它已经用于迭代包含在对象本身中的值。大多数其他答案,除了 liori 的答案,都对属性名称进行硬编码,这是我想避免的。

这是我根据 liori 的回答改编的:

import operator 
def walk(attr, start): 
  if callable(attr): 
    getter = attr 
  else: 
    getter = operator.attrgetter(attr) 
 
  o = getter(start) 
  while o: 
    yield o 
    o = getter(o) 

请您参考如下方法:

我能想到的最接近的事情是创建一个父生成器:

# Generate a node's parents, heading towards ancestors 
def gen_parents(node): 
   node = node.parent 
   while node: 
      yield node 
      node = node.parent 
 
# Now you can do this 
parents = [x.name for x in gen_parents(node)] 
print '.'.join(parents)