Bagaimana cara mengonversi string dengan item yang dipisahkan koma ke daftar dengan Python?

149

Bagaimana Anda mengubah string menjadi daftar?

Katakanlah string itu seperti text = "a,b,c". Setelah konversi, text == ['a', 'b', 'c']dan mudah-mudahan text[0] == 'a', text[1] == 'b'?

Clinteney Hui
sumber
2
hai saya melakukan ini seperti itu, daftar (stringObject.split (','))
Günay Gültekin

Jawaban:

216

Seperti ini:

>>> text = 'a,b,c'
>>> text = text.split(',')
>>> text
[ 'a', 'b', 'c' ]

Sebagai alternatif, Anda dapat menggunakan eval()jika Anda percaya string itu aman:

>>> text = 'a,b,c'
>>> text = eval('[' + text + ']')
Cameron
sumber
@Clinteney: Tidak masalah ;-) Anda mungkin juga ingin melihat picklejika Anda menahan objek ke string.
Cameron
2
Ini bukan array, ini adalah daftar, Array mewakili nilai-nilai dasar dan berperilaku sangat mirip dengan daftar, kecuali tipe objek yang disimpan di dalamnya dibatasi.
joaquin
8
Pengingat ramah: Jangan gunakan eval, meskipun Anda percaya string itu aman. Potensi bahaya keamanan tidak sebanding dengan apa pun selain skrip pribadi dan mengutak-atik shell interaktif.
A. Wilson
3
eval ('[' + text + ']') akan memperlakukan a, b, c sebagai variabel, bukan string.
phaibin
1
Tidak disukai karena dua solusi yang diusulkan melakukan hal yang sangat berbeda, dan ini tidak dijelaskan dengan cara apa pun dalam teks jawaban. Meskipun pertanyaannya sendiri tidak terlalu jelas, harus dijelaskan dalam jawaban bahwa kedua solusi tersebut bukanlah alternatif yang setara, tetapi interpretasi pertanyaan yang berbeda.
Matteo Italia
182

Hanya untuk menambahkan jawaban yang ada: mudah-mudahan, Anda akan menemukan sesuatu yang lebih seperti ini di masa mendatang:

>>> word = 'abc'
>>> L = list(word)
>>> L
['a', 'b', 'c']
>>> ''.join(L)
'abc'

Tapi apa yang Anda hadapi sekarang , ikuti jawaban @ Cameron .

>>> word = 'a,b,c'
>>> L = word.split(',')
>>> L
['a', 'b', 'c']
>>> ','.join(L)
'a,b,c'
Droogans
sumber
4
Meskipun saya setuju dengan Anda bahwa jawaban @ Cameron adalah jawaban "sekarang", saya pikir ketelitian Anda membuat ini menjadi jawaban yang lebih benar. Kami jarang diberikan string yang dipisahkan koma di dunia nyata dan ada baiknya mengetahui cara mengonversi ke daftar apa pun formatnya.
TristanZimmerman
40

Kode Python berikut akan mengubah string Anda menjadi daftar string:

import ast
teststr = "['aaa','bbb','ccc']"
testarray = ast.literal_eval(teststr)
Bryan
sumber
3
Mereka juga dapat menggunakan jsonmisalnya:json.loads(teststr)
Mohammad Nazari
ini seharusnya jawaban yang diterima
grepit
26

Saya tidak berpikir Anda perlu untuk

Dalam python Anda jarang perlu mengonversi string menjadi daftar, karena string dan daftar sangat mirip

Mengubah tipe

Jika Anda benar-benar memiliki string yang seharusnya berupa array karakter, lakukan ini:

In [1]: x = "foobar"
In [2]: list(x)
Out[2]: ['f', 'o', 'o', 'b', 'a', 'r']

Tidak mengubah jenisnya

Perhatikan bahwa String sangat mirip dengan list di python

String memiliki pengakses, seperti daftar

In [3]: x[0]
Out[3]: 'f'

String dapat diulang, seperti daftar

In [4]: for i in range(len(x)):
...:     print x[i]
...:     
f
o
o
b
a
r

TLDR

String adalah daftar. Hampir.

firelynx
sumber
8

Jika Anda ingin memisahkan spasi, Anda dapat menggunakan .split():

a = 'mary had a little lamb'
z = a.split()
print z

Keluaran:

['mary', 'had', 'a', 'little', 'lamb'] 
vivek mishra
sumber
Ini menghasilkan apa yang ada di antara (), yaitu tidak ada sama sekali.
Anthon
7

Jika Anda benar-benar menginginkan array:

>>> from array import array
>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> myarray = array('c', text)
>>> myarray
array('c', 'abc')
>>> myarray[0]
'a'
>>> myarray[1]
'b'

Jika Anda tidak memerlukan array, dan hanya ingin melihat karakter Anda berdasarkan indeks, ingat string adalah iterable, seperti daftar kecuali fakta bahwa ia tidak dapat diubah:

>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> text[0]
'a'
joaquin
sumber
1
Karena penasaran, setelah Anda melakukan myarray = array ('c', text), kemana perginya "c"? karena jika Anda mengetik array, Anda mendapatkan array ("c", "abc"), tetapi a [0] == a? Terima kasih
Clinteney Hui
@ Clinteney: 'c' berarti "membuat array karakter". Lihat dokumen untuk info lebih lanjut
Cameron
Saya telah memberi suara positif, tetapi terlalu dini. Saya mendapatkan array ('c', '1 1 91 0,001 228') saat memanggil a = array ('c', e) di mana e = "1 1 91 0.001 228"
Valentin Heinitz
@ValentinHeinitz Ya, itulah yang harus Anda dapatkan seperti yang ditunjukkan dalam contoh saya. Apa yang kamu harapkan ?
joaquin
1
@ Joaquin: Oke, saya mengerti. Tidak apa-apa dengan jawabannya. Saya bingung dengan pertanyaan "text == [a, b, c]" should be "text == ['a', 'b', 'c']"
Valentin Heinitz
5
m = '[[1,2,3],[4,5,6],[7,8,9]]'

m= eval(m.split()[0])

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Josué
sumber
Harap berikan beberapa informasi tambahan bersama dengan kode Anda sehingga pengepos asli dapat lebih memahami bagaimana ini menyelesaikan masalahnya.
Ivan
4

Semua jawaban bagus, ada cara lain untuk melakukannya, yaitu pemahaman daftar, lihat solusi di bawah ini.

u = "UUUDDD"

lst = [x for x in u]

untuk daftar yang dipisahkan koma lakukan hal berikut

u = "U,U,U,D,D,D"

lst = [x for x in u.split(',')]
Zeus
sumber
Saya tidak mengerti satu baris untuk loop dan tidak akan pernah
Mr PizzaGuy
1
@MrPizzaGuy mudah dan sangat berguna saat Anda menggunakannya, periksa youtube.com/watch
V=AhSvKGTh28Q
1

Saya biasanya menggunakan:

l = [ word.strip() for word in text.split(',') ]

yang stripruang menghapus sekitar kata-kata.

Yannick Loiseau
sumber
1

Untuk mengonversi stringmemiliki formulir yang a="[[1, 3], [2, -6]]"saya tulis namun kode yang belum dioptimalkan:

matrixAr = []
mystring = "[[1, 3], [2, -4], [19, -15]]"
b=mystring.replace("[[","").replace("]]","") # to remove head [[ and tail ]]
for line in b.split('], ['):
    row =list(map(int,line.split(','))) #map = to convert the number from string (some has also space ) to integer
    matrixAr.append(row)
print matrixAr
Khalid
sumber
0
# to strip `,` and `.` from a string ->

>>> 'a,b,c.'.translate(None, ',.')
'abc'

Anda harus menggunakan translatemetode bawaan untuk string.

Ketik help('abc'.translate)di shell Python untuk info lebih lanjut.

N 1.1
sumber
0

Menggunakan Python fungsional:

text=filter(lambda x:x!=',',map(str,text))
Eratosthenes
sumber
0

split()adalah temanmu disini. Saya akan membahas beberapa aspek split()yang tidak tercakup oleh jawaban lain.

  • Jika tidak ada argumen yang diteruskan split(), itu akan memisahkan string berdasarkan karakter spasi (spasi, tab, dan baris baru). Spasi kosong di depan dan di belakang akan diabaikan. Selain itu, spasi berurutan diperlakukan sebagai pemisah tunggal.

Contoh:

>>> "   \t\t\none  two    three\t\t\tfour\nfive\n\n".split()
['one', 'two', 'three', 'four', 'five']
  • Ketika sebuah pembatas karakter tunggal dilewatkan, split()perilakunya sangat berbeda dari perilaku defaultnya. Dalam hal ini, pembatas depan / belakang tidak diabaikan, pembatas berulang tidak "digabungkan" menjadi satu.

Contoh:

>>> ",,one,two,three,,\n four\tfive".split(',')
['', '', 'one', 'two', 'three', '', '\n four\tfive']

Jadi, jika pengupasan spasi putih diinginkan saat memisahkan string berdasarkan pemisah non-spasi, gunakan konstruksi ini:

words = [item.strip() for item in string.split(',')]
  • Ketika string multi-karakter dilewatkan sebagai pemisah, itu diambil sebagai pemisah tunggal dan bukan sebagai kelas karakter atau sekumpulan pemisah.

Contoh:

>>> "one,two,three,,four".split(',,')
['one,two,three', 'four']

Untuk menggabungkan beberapa pembatas menjadi satu, Anda perlu menggunakan re.split(regex, string) pendekatan. Lihat posting terkait di bawah.


Terkait

codeforester
sumber