Come convertire una stringa delimitata da virgole in un elenco in Python?


Risposte:


282

È possibile utilizzare il metodo str.split.

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

Se vuoi convertirlo in una tupla, basta

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

Se stai cercando di aggiungere un elenco, prova questo:

>>> my_list.append('F')
>>> print my_list
['A', 'B', 'C', 'D', 'E', 'F']

4
Attenzione però, la divisione di una stringa vuota non restituisce ciò che ci si potrebbe aspettare: "".split(",")restituisce [""](un elenco con un elemento, che è stringa vuota).
johndodo,

14

Nel caso di numeri interi inclusi nella stringa, se si desidera evitare di eseguirne il cast intsingolarmente, è possibile:

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

Si chiama comprensione elenco ed è basato sulla notazione del costruttore di insiemi.

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

Puoi utilizzare questa funzione per convertire stringhe di caratteri singoli delimitate da virgole in elenco-

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

Considerare quanto segue per gestire il caso di una stringa vuota:

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

Puoi dividere quella stringa ,e ottenere direttamente un elenco:

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

Produzione:

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

Puoi anche convertirlo in una n-tupla:

print(tuple(list1))

Produzione:

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


Spero che risolva il problema, ma per favore aggiungi una spiegazione del tuo codice con esso in modo che l'utente possa capire perfettamente ciò che desidera davvero.
Jaimil Patel,

Sembra un duplicato della risposta già accettata (9 anni fa).
Thomas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.