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)