[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