开发者

Obtain all subtrees in value

Given "a.b.c.d.e" I want to obtain all subtrees, efficiently, e.g. "b.c.d.e" and "c.d.e", but not "a.d.e" or "b.c.d".

Re开发者_开发知识库al world situation:

I have foo.bar.baz.example.com and I want all possible subdomain trees.


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

Given your sample data, subtrees equals ['a.b.c.d.e', 'b.c.d.e', 'c.d.e', 'd.e', 'e'].


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


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']


Not sure, if this is what you want.

But slicing of the list with varying sizes yields that.

>>> 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']
>>> 

Of course, the above was to illustrate the process. You could combine them into one liner.

[Edit: I thought the answer is same as any here and explains it well]

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜