Dividere la stringa tra virgolette doppie nell'elenco in modo ottimizzato?

Oct 09 2020

Qui l' ingresso

['not,equal','gold,copy','equity','ex','influence']

dopo aver applicato alcune funzionalità come dividi e sostituisci

l' uscita in questo modo

['not','equal','gold','copy','equity','ex','influence']

il problema era, se inserisco più input ci vorrà più tempo per cambiare come quell'output. Ho fatto domanda per il loop. C'è un modo possibile per ottimizzare?

   tag=input()
   tag_list=[]
   tag_list.append(tag)
   print(tag_list) 
   hi=[]

    for i in range(len(tag_list)):
         hi.append(tag_list[i].split(',')) 
        print(hi)

Risposte

naam Oct 09 2020 at 16:43

Se ['not,equal','gold,copy','equity','ex','influence']è il tuo input per il input()metodo, usa astil literal_evalmetodo del modulo per convertirlo in un elenco di python.

Ho usato le comprensioni degli elenchi durante la divisione dei tag e functoolper appiattire l'elenco


import operator
import functools
import ast

tag = input() # ['not,equal','gold,copy','equity','ex','influence']
tag_list = ast.literal_eval(tag)
# tag_list.append(tag)
print("tag_list: ", tag_list)

hi = [tags.split(",") for tags in tag_list]
print("hi: ", hi)
hi_flatten = functools.reduce(operator.concat, hi)
print("hi_flatten: ", hi_flatten)

Produzione:

tag_list:  ['not,equal', 'gold,copy', 'equity', 'ex', 'influence']
hi:  [['not', 'equal'], ['gold', 'copy'], ['equity'], ['ex'], ['influence']]
hi_flatten:  ['not', 'equal', 'gold', 'copy', 'equity', 'ex', 'influence']
baduker Oct 09 2020 at 16:17

Prova le comprensioni dell'elenco:

input_ = ['not,equal','gold,copy','equity','ex','influence']
output = [item for item in [i.split(",") for i in input_] for item in item]

Risultato:

['not', 'equal', 'gold', 'copy', 'equity', 'ex', 'influence']

La comprensione della lista è equivalente a:

input_ = ['not,equal','gold,copy','equity','ex','influence']
output = []
for item in input_:
    for sub_item in item.split(","):
        output.append(sub_item)