Jak przekonwertować ciąg rozdzielany przecinkami na listę w Pythonie?

Odpowiedzi:

282

Możesz użyć metody str.split.

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

Jeśli chcesz przekonwertować go na krotkę, po prostu

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

Jeśli chcesz dołączyć do listy, spróbuj tego:

>>> my_list.append('F')
>>> print my_list
['A', 'B', 'C', 'D', 'E', 'F']
Matt Williamson
źródło
4
Uważaj jednak, dzielenie pustego ciągu nie zwraca tego, czego można by się spodziewać: "".split(",")zwraca [""](listę z jednym elementem, który jest pustym łańcuchem).
johndodo
14

W przypadku liczb całkowitych, które są zawarte w łańcuchu, jeśli chcesz uniknąć rzutowania ich na intpojedynczo, możesz zrobić:

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

Nazywa się to zrozumieniem list i opiera się na notacji konstruktora zestawów.

dawny:

>>> 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
źródło
5
>>> some_string='A,B,C,D,E'
>>> new_tuple= tuple(some_string.split(','))
>>> new_tuple
('A', 'B', 'C', 'D', 'E')
Raymond Hettinger
źródło
0

Możesz użyć tej funkcji do konwersji pojedynczych znaków rozdzielanych przecinkami na listę

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

Rozważ następujące kwestie, aby obsłużyć wielkość liter w przypadku pustego ciągu:

>>> 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
źródło
-1

Możesz podzielić ten ciąg ,i bezpośrednio uzyskać listę:

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

Wynik:

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

Możesz również przekonwertować go na n-krotkę:

print(tuple(list1))

Wynik:

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

Crispen Gari
źródło
Mam nadzieję, że to rozwiąże problem, ale proszę dodać wyjaśnienie swojego kodu, aby użytkownik uzyskał doskonałe zrozumienie, czego naprawdę chce.
Jaimil Patel
Wygląda na duplikat już zaakceptowanej odpowiedzi (9 lat temu).
Thomas