Bonjour,
J'ai une liste de taille variable de cette forme:
et j'aimerai obtenir:Code:liste = ((a,b,c),(d,e,f),(g,h,i))
svp aidez moiCode:liste = (a,b,c,d,e,f,g,h,i)
Version imprimable
Bonjour,
J'ai une liste de taille variable de cette forme:
et j'aimerai obtenir:Code:liste = ((a,b,c),(d,e,f),(g,h,i))
svp aidez moiCode:liste = (a,b,c,d,e,f,g,h,i)
C’est pas une liste, mais un tuple, ça… ;)
Sinon, à la main*:
Code:
1
2
3
4
5
6 t = ((1,2,3),(4,5,6),(7,8,9)) ret = [] for el in t: ret += el t = tuple(ret)
Ou alors, avec les itertools*:
Code:
1
2
3 import itertools t = tuple(itertools.chain(*t))
:)
Bonjour,
Et on peut utiliser une fonction récursive pour traiter la mise à plat dans le cas général, quelque soit la "profondeur" de l'imbrication:
TyrtamosCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 def aplatliste(L): R = [] for elem in L: if isinstance(elem, (list, tuple)): R.extend(aplatliste(elem)) else: R.append(elem) return R x = (('a','b','c'), 'd',('e',('f','g'),'h')) print tuple(aplatliste(x)) ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')
Salut,
une structure de la forme (('a','b','c'), 'd',('e',('f','g'),'h')) est un arbre et ('a','b','c', 'd', 'e', 'f','g' ,'h') la liste des feuilles que l'on rencontre lorsqu'on parcours l'arbre en depth first.
Exprimé sous une forme récursive, çà donne la forme:
Après, c'est de la décoration.Code:
1
2
3
4
5
6 def walk(tree, f): for node in tree: if has_childs(node): walk(node, f) else: f(node)
- WCode:
1
2
3
4
5 has_childs = lambda c: isinstance(c, (tuple, list)) x = (('a','b','c'), 'd',('e',('f','g'),'h')) R = [] walk(x, R.append) print R