@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'
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:
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'
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']"
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
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.
Jawaban:
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 + ']')
sumber
pickle
jika Anda menahan objek ke string.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'
sumber
Kode Python berikut akan mengubah string Anda menjadi daftar string:
import ast teststr = "['aaa','bbb','ccc']" testarray = ast.literal_eval(teststr)
sumber
json
misalnya:json.loads(teststr)
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.
sumber
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']
sumber
()
, yaitu tidak ada sama sekali.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'
sumber
m = '[[1,2,3],[4,5,6],[7,8,9]]' m= eval(m.split()[0]) [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
sumber
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(',')]
sumber
Saya biasanya menggunakan:
l = [ word.strip() for word in text.split(',') ]
yang
strip
ruang menghapus sekitar kata-kata.sumber
Untuk mengonversi
string
memiliki formulir yanga="[[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
sumber
# to strip `,` and `.` from a string -> >>> 'a,b,c.'.translate(None, ',.') 'abc'
Anda harus menggunakan
translate
metode bawaan untuk string.Ketik
help('abc'.translate)
di shell Python untuk info lebih lanjut.sumber
Menggunakan Python fungsional:
text=filter(lambda x:x!=',',map(str,text))
sumber
Contoh 1
>>> email= "[email protected]" >>> email.split() #OUTPUT ["[email protected]"]
Contoh 2
>>> email= "[email protected], [email protected]" >>> email.split(',') #OUTPUT ["[email protected]", "[email protected]"]
sumber
split()
adalah temanmu disini. Saya akan membahas beberapa aspeksplit()
yang tidak tercakup oleh jawaban lain.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']
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(',')]
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
sumber