[python] unpack sequences

Martin Blazik martin.blazik na premiumsms.cz
Čtvrtek Červenec 31 22:06:38 CEST 2008


Cusik,
nenarazil jste nekdo na knihovni funkci, ktera dokaze rozbalit do jedine
sekvence libovolne zanorene sekvence? At hledam jak hledam, nemuzu nic
najit. Funkcnost by mela byt nasledujici

lachtan


from types import *

# osklivy zpusob zjisteni iterovatelnosti, ale nenasel jsem jiny

def caniter(value):
    if type(value) in (StringType, UnicodeType):
        return False
    try:
        iter(value)
        return True
    except TypeError:
        return False
       

# vyuziti generatoru

def iterall(iterable):
    if caniter(iterable):
        for item in iterable:
            if caniter(item):               
                for subitem in iterall(item):
                    yield subitem
            else:
                yield item
    else:
        yield iterable


# vyuziti seznamu

def iterall_lst(iterable):
    all = []
    if caniter(iterable):
        for item in iterable:
            all += iterall(item)
    else:
        all += [iterable]
    return all


arr = [xrange(4), 'XXX',
[1,2,[3,4,5],6,7],[8,9,[10,11,[12,13,14,[15,[-1,-2,-3]],16],17]],{1:'one','two':2}]
for item in iterall(arr):
    print item
print '-' * 40
for item in iterall_lst(arr):
    print item







Další informace o konferenci Python