Comment convertir une chaîne délimitée par des virgules en liste en Python?

Réponses:

282

Vous pouvez utiliser la méthode str.split.

>>> my_string = 'A,B,C,D,E'
>>> my_list = my_string.split(",")
>>> print my_list
['A', 'B', 'C', 'D', 'E']

Si vous souhaitez le convertir en tuple, il suffit

>>> print tuple(my_list)
('A', 'B', 'C', 'D', 'E')

Si vous souhaitez ajouter à une liste, essayez ceci:

>>> my_list.append('F')
>>> print my_list
['A', 'B', 'C', 'D', 'E', 'F']
Matt Williamson
la source
4
Attention cependant, le fractionnement d'une chaîne vide ne renvoie pas ce à quoi on aurait pu s'attendre: "".split(",")renvoie [""](une liste avec un élément, qui est une chaîne vide).
johndodo
14

Dans le cas d'entiers inclus dans la chaîne, si vous voulez éviter de les convertir intindividuellement, vous pouvez faire:

mList = [int(e) if e.isdigit() else e for e in mStr.split(',')]

C'est ce qu'on appelle la compréhension de liste et elle est basée sur la notation du générateur d'ensembles.

ex:

>>> mStr = "1,A,B,3,4"
>>> mList = [int(e) if e.isdigit() else e for e in mStr.split(',')]
>>> mList
>>> [1,'A','B',3,4]
Camilo Celis Guzman
la source
5
>>> some_string='A,B,C,D,E'
>>> new_tuple= tuple(some_string.split(','))
>>> new_tuple
('A', 'B', 'C', 'D', 'E')
Raymond Hettinger
la source
0

Vous pouvez utiliser cette fonction pour convertir des chaînes de caractères simples séparées par des virgules en liste-

def stringtolist(x):
    mylist=[]
    for i in range(0,len(x),2):
        mylist.append(x[i])
    return mylist
Hemang Jalali
la source
0
#splits string according to delimeters 
'''
Let's make a function that can split a string
into list according the given delimeters. 
example data: cat;dog:greff,snake/
example delimeters: ,;- /|:
'''
def string_to_splitted_array(data,delimeters):
    #result list
    res = []
    # we will add chars into sub_str until
    # reach a delimeter
    sub_str = ''
    for c in data: #iterate over data char by char
        # if we reached a delimeter, we store the result 
        if c in delimeters: 
            # avoid empty strings
            if len(sub_str)>0:
                # looks like a valid string.
                res.append(sub_str)
                # reset sub_str to start over
                sub_str = ''
        else:
            # c is not a deilmeter. then it is 
            # part of the string.
            sub_str += c
    # there may not be delimeter at end of data. 
    # if sub_str is not empty, we should att it to list. 
    if len(sub_str)>0:
        res.append(sub_str)
    # result is in res 
    return res

# test the function. 
delimeters = ',;- /|:'
# read the csv data from console. 
csv_string = input('csv string:')
#lets check if working. 
splitted_array = string_to_splitted_array(csv_string,delimeters)
print(splitted_array)
ozzy
la source
0

Considérez ce qui suit pour gérer le cas d'une chaîne vide:

>>> my_string = 'A,B,C,D,E'
>>> my_string.split(",") if my_string else []
['A', 'B', 'C', 'D', 'E']
>>> my_string = ""
>>> my_string.split(",") if my_string else []
[]
Ido Savion
la source
-1

Vous pouvez diviser cette chaîne ,et obtenir directement une liste:

mStr = 'A,B,C,D,E'
list1 = mStr.split(',')
print(list1)

Production:

['A', 'B', 'C', 'D', 'E']

Vous pouvez également le convertir en n-tuple:

print(tuple(list1))

Production:

('A', 'B', 'C', 'D', 'E')

Crispen Gari
la source
J'espère que cela résoudra le problème, mais veuillez ajouter une explication de votre code afin que l'utilisateur comprenne parfaitement ce qu'il / elle veut vraiment.
Jaimil Patel
On dirait un double de la réponse déjà acceptée (il y a 9 ans).
Thomas