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

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]

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

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

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

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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.