Ho una lista dicono:Come convertire i numeri delle stringhe in numeri interi in un elenco?
['batting average', '306', 'ERA', '1710']
Come posso convertire i numeri destinati senza toccare le corde?
Grazie per l'aiuto.
Ho una lista dicono:Come convertire i numeri delle stringhe in numeri interi in un elenco?
['batting average', '306', 'ERA', '1710']
Come posso convertire i numeri destinati senza toccare le corde?
Grazie per l'aiuto.
changed_list = [int(f) if f.isdigit() else f for f in original_list]
I dati sembrano come dovresti sapere in quali posizioni dovrebbero essere i numeri. In questo caso è probabilmente meglio per convertire in modo esplicito i dati a queste posizioni invece di convertire qualsiasi cosa che assomiglia a un numero:
ls = ['batting average', '306', 'ERA', '1710']
ls[1] = int(ls[1])
ls[3] = int(ls[3])
Yep questa è la soluzione migliore per il caso statico, mentre Alex è il migliore per il caso dinamico. – Unknown
Prova questo:
def convert(someList):
for item in someList:
try:
yield int(item)
except ValueError:
yield item
newList= list(convert(oldList))
a= ['batting average', '306', 'ERA', '1710.5']
[f if sum([c.isalpha() for c in f]) else float(f) for f in a ]
se l'elenco contiene galleggiante , string e int (come indicato da @ d.putto nel commento)
'sum ([c.isalpha() per c in f])' è un modo abbastanza sub-ottimale per verificare "se un carattere in f è alfabetico" - prova 'any (c.isalpha() per c in f) 'per migliorare la leggibilità e le prestazioni. Naturalmente, entrambi falliranno se 'f' è uguale a' '! '' - una stringa che non è un numero ma che non ha caratteri alfanumerici - e inoltre non riesce a convertire ad esempio '' 1.7e3'' - una stringa che contiene un char alfanumerico, ma sarebbe comunque perfetto per passare come argomento a 'float' (" notazione esponenziale "). –
vero. buon punto ... pubblicato solo per rispondere all'esempio forzato specifico di d.putto. Avrei dovuto riflettere prima di postare la mia risposta a metà! –
Un elegante liner. Guarda il potere della comprensione delle liste. – mkClark
stava pensando su linee simili – Nope
buona soluzione ma cosa succede se lista ha valori float anche '['batting average', '306', 'ERA', '1710.5']' –