获取所有子树的值

时间:2010-12-07 19:46:21

标签: python

鉴于“a.b.c.d.e”我希望有效地获得所有子树,例如“b.c.d.e”和“c.d.e”,但不是“a.d.e”或“b.c.d”。

现实世界的情况:

我有foo.bar.baz.example.com,我想要所有可能的子域树。

4 个答案:

答案 0 :(得分:5)

listed = "a.b.c.d.e".split('.')
subtrees = ['.'.join(listed[idx:]) for idx in xrange(len(listed))]

根据您的样本数据,子树等于['a.b.c.d.e', 'b.c.d.e', 'c.d.e', 'd.e', 'e']

答案 1 :(得分:3)

items = data.split('.')
['.'.join(items[i:]) for i in range(0, len(items))]

答案 2 :(得分:2)

def parts( s, sep ):
    while True:
        yield s
        try:
            # cut the string after the next sep
            s = s[s.index(sep)+1:]
        except ValueError:
            # no `sep` left
            break

print list(parts("a.b.c.d.e", '.'))
# ['a.b.c.d.e', 'b.c.d.e', 'c.d.e', 'd.e', 'e']

答案 3 :(得分:0)

不确定,如果这是你想要的。

但是对不同大小的列表进行切片会产生这种效果。

>>> x = "a.b.c.d.e"
>>> k = x.split('.')
>>> k
['a', 'b', 'c', 'd', 'e']
>>> l = []
>>> for el in range(len(k)): l.append(k[el+1:])
... 
>>> l
[['b', 'c', 'd', 'e'], ['c', 'd', 'e'], ['d', 'e'], ['e'], []]
>>> [".".join(l1) for l1 in l if l1]
['b.c.d.e', 'c.d.e', 'd.e', 'e']
>>> 

当然,以上是为了说明这个过程。你可以将它们组合成一个衬垫。

[编辑:我认为答案与此处的答案相同并且解释得很清楚]