Bagaimana cara mengubah string yang dibatasi koma ke daftar di Python?


Jawaban:


282

Anda dapat menggunakan metode str.split.

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

Jika Anda ingin mengubahnya menjadi tuple, cukup

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

Jika Anda ingin menambahkan ke daftar, coba ini:

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

4
Hati-hati, memisahkan string kosong tidak mengembalikan apa yang diharapkan: "".split(",")mengembalikan [""](daftar dengan satu elemen, yang merupakan string kosong).
johndodo

14

Dalam kasus bilangan bulat yang termasuk dalam string, jika Anda ingin menghindari casting mereka secara intindividual, Anda dapat melakukannya:

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

Ini disebut pemahaman daftar , dan didasarkan pada notasi pembangun set.

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

Anda dapat menggunakan fungsi ini untuk mengonversi string karakter tunggal yang dibatasi koma menjadi 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

Pertimbangkan hal berikut untuk menangani kasing kosong:

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

Anda dapat memisahkan string itu ,dan langsung mendapatkan daftar:

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

Keluaran:

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

Anda juga dapat mengonversinya menjadi n-tuple:

print(tuple(list1))

Keluaran:

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


Berharap itu akan menyelesaikan masalah tetapi tolong tambahkan penjelasan kode Anda dengan itu sehingga pengguna akan mendapatkan pemahaman yang sempurna yang ia benar-benar inginkan.
Jaimil Patel

Sepertinya duplikat dari jawaban yang sudah diterima (9 tahun yang lalu).
Thomas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.