¿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']

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]

5
>>> some_string='A,B,C,D,E'
>>> new_tuple= tuple(some_string.split(','))
>>> new_tuple
('A', 'B', 'C', 'D', 'E')

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

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)

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 []
[]

-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')


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.