tengo lista de cadenaspitón: creación de listas de cadena
a = ['word1, 23, 12','word2, 10, 19','word3, 11, 15']
Me gustaría crear una lista
b = [['word1',23,12],['word2', 10, 19],['word3', 11, 15]]
Es esta una manera fácil de hacer esto?
tengo lista de cadenaspitón: creación de listas de cadena
a = ['word1, 23, 12','word2, 10, 19','word3, 11, 15']
Me gustaría crear una lista
b = [['word1',23,12],['word2', 10, 19],['word3', 11, 15]]
Es esta una manera fácil de hacer esto?
input = ['word1, 23, 12','word2, 10, 19','word3, 11, 15']
output = []
for item in input:
items = item.split(',')
output.append([items[0], int(items[1]), int(items[2])])
Prueba esto:
b = [ entry.split(',') for entry in a ]
b = [ b[i] if i % 3 == 0 else int(b[i]) for i in xrange(0, len(b)) ]
Si usted necesita para convertir algunos de ellos a los números y no sabe de antemano cuáles, se necesitará algo de código adicional. Pruebe algo como esto:
b = []
for x in a:
temp = []
items = x.split(",")
for item in items:
try:
n = int(item)
except ValueError:
temp.append(item)
else:
temp.append(n)
b.append(temp)
Esto es más largo que las otras respuestas, pero es más versátil.
más concisa que otros:
def parseString(string):
try:
return int(string)
except ValueError:
return string
b = [[parseString(s) for s in clause.split(', ')] for clause in a]
Alternativamente, si el formato es fijo como <string>, <int>, <int>
, puede ser aún más concisa:
def parseClause(a,b,c):
return [a, int(b), int(c)]
b = [parseClause(*clause) for clause in a]
Sé que esto es viejo, pero aquí está una una comprensión de la lista del trazador de líneas:
data = ['word1, 23, 12','word2, 10, 19','word3, 11, 15']
[[int(item) if item.isdigit() else item for item in items.split(', ')] for items in data]
o
[int(item) if item.isdigit() else item for items in data for item in items.split(', ')]
@Oliver No estoy seguro de si está hablando en serio o no! ;-) No parece todo eso Pythonic. Las comprensiones de listas tienen su lugar, pero pueden ser exageradas en mi opinión. O tal vez sea solo mi falta de familiaridad con ellos. –
¡Definitivamente serio! Es muy legible Creo que este es un ejemplo clásico donde la lista de comprensiones * puede * usarse, pero al final no es la mejor manera de hacerlo. – user
¡Es una cuestión de estilo, supongo, prefiero la comprensión de la lista! – wim