Podobne pytania zadawano wcześniej, ale rozwiązania tych nie działają dla mojego przypadku użycia (np. Making a flat list out of list of lists in Python i Flattening a shallow list in Python. Mam listę ciągów . i list, w którym lista osadzone mogą zawierać także ciągi i listy Chcę przekształcić prostą listę ciągów bez strun do przecinania do listy znakówSpłaszcz listę list i list ciągów i list w Pythonie
import itertools
list_of_menuitems = ['image10', ['image00', 'image01'], ['image02', ['image03', 'image04']]]
chain = itertools.chain(*list_of_menuitems)
wynikowej liście.
['i', 'm', 'a', 'g', 'e', '1', '0', 'image00', 'image01', 'image02', ['image03', 'image04']]
Oczekiwane wynik:
['image10', 'image00', 'image01', 'image02', 'image03', 'image04']
Jaki jest najlepszy (Pythonic) sposób na zrobienie tego?
Patrz: http://stackoverflow.com/questions/16176742/python-3-replacement-for-deprecated-compiler-ast-flatten-function –
Zgadzam się, że jest prawie duplikatem http://stackoverflow.com/questions/5286541/how-can-i-flatten-lists-without-splitting-strings. Jedynym wymiarem, którego brakuje w tym pytaniu (którego nie znalazłem przed zadaniem mi pytania) jest kwestia arbitralnych poziomów zagnieżdżania. Jednak zamieszczone tam rozwiązanie (i na http: // stackoverflow.com/questions/16176742/python-3-replacement-for-depiler-compiler-ast-flatten-function) radzi sobie z tym problemem całkiem ładnie, przynajmniej w przypadku, który podałem. –
OP: użyj 'basestring' zamiast' str', aby nie dzielić 'unicode'. – 2rs2ts