1
votes

Python: conserver la liste externe lors de l'aplatissement de la liste interne

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']]


0 commentaires

4 Réponses :


1
votes

UPDATE:

newlist = [[x[0]] + x[1] if len(x) >= 2 else x for x in final_file]

Cela fonctionne


1 commentaires

cela suppose qu'ils sont ordonnés d'une certaine manière



3
votes

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))


0 commentaires

0
votes
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.

0 commentaires

1
votes

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']],
]


0 commentaires