Pertanyaan Ubah daftar string ke daftar dalam python


Saya memiliki string seperti di bawah ini,

val = '["10249/54","10249/147","10249/187","10249/252","10249/336"]'

Saya perlu mengurai dan mengambil nilai setelah / dan dimasukkan ke dalam daftar seperti di bawah ini

['54','147','187','252','336']

Kode saya: [a[a.index('/')+1:] for a in val[1:-1].split(',')]

Keluaran : ['54"', '147"', '187"', '252"', '336"']

Ini memiliki tanda kutip ganda juga "yang salah. Setelah saya coba seperti di bawah ini

c = []
for a in val[1:-1].split(','):
    tmp = a[1:-1]
    c.append(tmp[tmp.index('/')+1:])

Output:

['54', '147', '187', '252', '336']

Apakah ada cara yang lebih baik untuk melakukan ini?


4
2018-04-11 03:22


asal


Jawaban:


Anda dapat melakukannya dalam satu baris dengan mudah:

from ast import literal_eval
a = [i.split('/')[-1] for i in literal_eval(val)]
a
>>>['54', '147', '187', '252', '336']

literal_eval() mengubah string Anda menjadi daftar literal.


2
2018-04-11 03:28



Ya ... dengan asumsi setiap nilai memiliki / seperti contoh Anda, ini lebih unggul:

>>> from ast import literal_eval
>>>
>>> val = '["10249/54","10249/147","10249/187","10249/252","10249/336"]'
>>> [int(i.split('/')[1]) for i in literal_eval(val)]
[54, 147, 187, 252, 336]

* Diedit untuk memasukkan braket yang terlupakan


2
2018-04-11 03:27



Coba gunakan ekspresi reguler!

Anda dapat melakukannya dalam satu baris dengan cara ini.

import re

val = '["10249/54","10249/147","10249/187","10249/252","10249/336"]'

output = re.findall('/(\d+)', val) # returns a list of all strings that match the pattern

print(output)

Hasil: ['54', '147', '187', '252', '336']

re.findall menghasilkan daftar baru yang disebut dengan semua kecocokan dari regexp. Lihat dokumen pada ekspresi reguler untuk info lebih lanjut tentang topik ini.


2
2018-04-11 03:36



Anda dapat mencoba json modul untuk mengubah string ke daftar

>>> import json
>>> val ='["10249/54","10249/147","10249/187","10249/252","10249/336"]'
>>> list(map(lambda x: x.split('/')[-1], json.loads(val)))
>>> ['54', '147', '187', '252', '336']

1
2018-04-11 05:08