¿Cómo convertir una cadena delimitada por comas a una lista en Python?

Respuestas:

282

Puede usar el método str.split.

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

Si quieres convertirlo en una tupla, solo

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

Si desea agregar a una lista, intente esto:

>>> my_list.append('F')
>>> print my_list
['A', 'B', 'C', 'D', 'E', 'F']
Matt Williamson
fuente
44
Sin embargo, tener cuidado al dividir una cadena vacía no devuelve lo que uno podría haber esperado: "".split(",")retornos [""](una lista con un elemento, que es una cadena vacía).
johndodo
14

En el caso de los enteros que se incluyen en la cadena, si desea evitar convertirlos intindividualmente, puede hacer:

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

Se llama comprensión de la lista y se basa en la notación del generador de conjuntos.

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
fuente
5
>>> some_string='A,B,C,D,E'
>>> new_tuple= tuple(some_string.split(','))
>>> new_tuple
('A', 'B', 'C', 'D', 'E')
Raymond Hettinger
fuente
0

Puede usar esta función para convertir cadenas de caracteres individuales delimitadas por comas a list-

def stringtolist(x):
    mylist=[]
    for i in range(0,len(x),2):
        mylist.append(x[i])
    return mylist
Hemang Jalali
fuente
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
fuente
0

Considere lo siguiente para manejar el caso de una cadena vacía:

>>> 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
fuente
-1

Puede dividir esa cadena ,y obtener directamente una lista:

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

Salida:

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

También puedes convertirlo en una n-tupla:

print(tuple(list1))

Salida:

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

Crispen Gari
fuente
Espero que resuelva el problema, pero agregue una explicación de su código con él para que el usuario obtenga una comprensión perfecta de lo que realmente quiere.
Jaimil Patel
Parece un duplicado de la respuesta ya aceptada (hace 9 años).
Thomas