web-dev-qa-db-fra.com

python: créer une liste à partir d'une chaîne

J'ai une liste de cordes

a = ['Word1, 23, 12','Word2, 10, 19','Word3, 11, 15']

Je voudrais créer une liste

b = [['Word1',23,12],['Word2', 10, 19],['Word3', 11, 15]]

Est-ce un moyen facile de faire cela?

10
Zenvega
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])])
24
David Heffernan

Essaye ça:

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

Plus concis que d'autres:

def parseString(string):
    try:
        return int(string)
    except ValueError:
        return string

b = [[parseString(s) for s in clause.split(', ')] for clause in a]

Sinon, si votre format est fixé à <string>, <int>, <int>, vous pouvez être encore plus concis:

def parseClause(a,b,c):
    return [a, int(b), int(c)]

b = [parseClause(*clause) for clause in a]
2
ninjagecko

Si vous avez besoin de convertir certains d’entre eux en nombres et que vous ne savez pas à l’avance lesquels, vous aurez besoin de code supplémentaire. Essayez quelque chose comme ça:

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)

C'est plus long que les autres réponses, mais c'est plus polyvalent.

1
Javier

Je sais que c'est vieux, mais voici une compréhension d'une liste à une ligne:

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]

ou 

[int(item) if item.isdigit() else item for items in data for item in items.split(', ')]
1
Dan P.