J'ai une liste de listes qui ressemble à ceci. Je voudrais supprimer la liste interne et conserver la liste externe. Je ne veux PAS aplatir le tout en une liste géante d'éléments.
100[['ADDRESS', 'START', '100']] . TESTS PC FORWARD ADDRESSING[] . TESTS BASE ADDRESSING[] . TESTS PC BACKWARD ADDRESSING[] 100[['NOW', '+LDB', '#BEGIN', 'load base register']] 104[['XXX', 'BASE', 'BEGIN', 'tell assembler']] 104[['YYY', 'LDA', 'BE', 'A <- (m..m+2)']] 107[['EN', 'RESW', '4']] 113[['BE', 'WORD', '2']] 116[['BEGIN', 'RESW', '1']] 119[['JUNK', 'RESW', '2200']] 1ae1[['THERE', 'RESW', '1']] 1ae4[['ZZZ', 'LDA', 'JUNK']] 1ae7[['MMM', 'STA', 'THERE']] 1aea[['', 'END', 'NOW']]
Voici ce que je veux:
['100', 'ADDRESS', 'START', '100'] ['. TESTS PC FORWARD ADDRESSING'] ['. TESTS BASE ADDRESSING'] ['. TESTS PC BACKWARD ADDRESSING'] ['100', 'NOW', '+LDB', '#BEGIN', 'load base register'] ['104', 'XXX', 'BASE', 'BEGIN', 'tell assembler'] ['104', 'YYY', 'LDA', 'BE', 'A <- (m..m+2)'] ['107', 'EN', 'RESW', '4'] ['113', 'BE', 'WORD', '2'] ['116', 'BEGIN', 'RESW', '1'] ['119', 'JUNK', 'RESW', '2200'] ['1ae1', 'THERE', 'RESW', '1'] ['1ae4', 'ZZZ', 'LDA', 'JUNK'] ['1ae7', 'MMM', 'STA', 'THERE'] ['1aea', '', 'END', 'NOW']
Mon code :
newlist = [str (sublist [0]) + str (sublist [1:]) pour la sous-liste dans final_file]
Ce code me donne cette sortie, pas exactement ce que je veux:
['100', ['ADDRESS', 'START', '100']] ['. TESTS PC FORWARD ADDRESSING'] ['. TESTS BASE ADDRESSING'] ['. TESTS PC BACKWARD ADDRESSING'] ['100', ['NOW', '+LDB', '#BEGIN', 'load base register']] ['104', ['XXX', 'BASE', 'BEGIN', 'tell assembler']] ['104', ['YYY', 'LDA', 'BE', 'A <- (m..m+2)']] ['107', ['EN', 'RESW', '4']] ['113', ['BE', 'WORD', '2']] ['116', ['BEGIN', 'RESW', '1']] ['119', ['JUNK', 'RESW', '2200']] ['1ae1', ['THERE', 'RESW', '1']] ['1ae4', ['ZZZ', 'LDA', 'JUNK']] ['1ae7', ['MMM', 'STA', 'THERE']] ['1aea', ['', 'END', 'NOW']]
4 Réponses :
UPDATE:
newlist = [[x[0]] + x[1] if len(x) >= 2 else x for x in final_file]
Cela fonctionne
cela suppose qu'ils sont ordonnés d'une certaine manière
Voici une approche for-loop simple pour vous donner une approche générique.
def unpacker(lists): for list_ in lists: o = [] for item in list_: if isinstance(item, list): for i in item: o.append(i) else: o.append(item) yield o
Ensuite, vous l'appelez -> list (unpacker ( l))
newlist = ['104', ['YYY', 'LDA', 'BE', 'A <- (m..m+2)']] final = [] for n in newlist: if type(n) == list: for i in n: final.append(i) else: final.append(n) print(final) You can check if the type of the element is list, if yes then use another loop to unpack it and append it to a new list.
Si la liste en question est;
sum([sub if isinstance(sub, list) else [sub] for sub in a[0]], [])
Une ligne unique:
[sum([sub if isinstance(sub, list) else [sub] for sub in x], []) for x in a]
Si vous le souhaitez uniquement pour les listes individuelles , puis supprimez la boucle externe;
a = [ ['100', ['ADDRESS', 'START', '100']], ['. TESTS PC FORWARD ADDRESSING'], ['. TESTS BASE ADDRESSING'], ['. TESTS PC BACKWARD ADDRESSING'], ['100', ['NOW', '+LDB', '#BEGIN', 'load base register']], ['104', ['XXX', 'BASE', 'BEGIN', 'tell assembler']], ['104', ['YYY', 'LDA', 'BE', 'A <- (m..m+2)']], ['107', ['EN', 'RESW', '4']], ['113', ['BE', 'WORD', '2']], ['116', ['BEGIN', 'RESW', '1']], ['119', ['JUNK', 'RESW', '2200']], ['1ae1', ['THERE', 'RESW', '1']], ['1ae4', ['ZZZ', 'LDA', 'JUNK']], ['1ae7', ['MMM', 'STA', 'THERE']], ['1aea', ['', 'END', 'NOW']], ]