Как преобразовать разделенную запятыми строку в список в Python?

169

Дана строка, представляющая собой последовательность из нескольких значений, разделенных запятой:

mStr = 'A,B,C,D,E' 

Как мне преобразовать строку в список?

mList = ['A', 'B', 'C', 'D', 'E']
O.rka
источник

Ответы:

282

Вы можете использовать метод str.split.

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

Если вы хотите преобразовать его в кортеж, просто

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

Если вы хотите добавить в список, попробуйте это:

>>> my_list.append('F')
>>> print my_list
['A', 'B', 'C', 'D', 'E', 'F']
Мэтт Уильямсон
источник
4
Осторожно, разделение пустой строки не возвращает ожидаемого: "".split(",")возвращает [""](список с одним элементом, который является пустой строкой).
johndodo
14

В случае целых чисел, включенных в строку, если вы хотите избежать приведения их к intиндивидуально, вы можете сделать:

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

Это называется списком , и оно основано на нотации построителя множеств.

например:

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

Вы можете использовать эту функцию для преобразования разделенных запятыми строк из одного символа в список

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)
Ozzy
источник
0

Рассмотрим следующее для обработки случая пустой строки:

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

Вы можете разбить эту строку ,и сразу получить список:

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

Вывод:

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

Вы также можете преобразовать его в n-кортеж:

print(tuple(list1))

Вывод:

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

Крисп Гари
источник
Надеюсь, что это решит проблему, но, пожалуйста, добавьте объяснение вашего кода вместе с ним, чтобы пользователь получил полное понимание того, что он / она действительно хочет.
Джаймил Патель
Похоже, дубликат уже принятого ответа (9 лет назад).
Томас