Saya memiliki beberapa kode python yang terbelah pada koma, tetapi tidak menghapus spasi:
>>> string = "blah, lots , of , spaces, here "
>>> mylist = string.split(',')
>>> print mylist
['blah', ' lots ', ' of ', ' spaces', ' here ']
Saya lebih suka berakhir dengan spasi kosong dihapus seperti ini:
['blah', 'lots', 'of', 'spaces', 'here']
Saya sadar bahwa saya bisa mengulang daftar dan menghapus () setiap item tetapi, karena ini adalah Python, saya menduga ada cara yang lebih cepat, lebih mudah, dan lebih elegan untuk melakukannya.
python
whitespace
strip
Mr_Chimp
sumber
sumber
Berpisah menggunakan ekspresi reguler. Catatan saya menjadikan case ini lebih umum dengan spasi terkemuka. Pemahaman daftar adalah untuk menghapus string nol di bagian depan dan belakang.
Ini berfungsi bahkan jika
^\s+
tidak cocok:Inilah sebabnya mengapa Anda perlu ^ \ s +:
Lihat ruang terkemuka di bla?
Klarifikasi: di atas menggunakan interpreter Python 3, tetapi hasilnya sama dalam Python 2.
sumber
[x.strip() for x in my_string.split(',')]
lebih pythonic untuk pertanyaan yang diajukan. Mungkin ada kasus di mana solusi saya diperlukan. Saya akan memperbarui konten ini jika saya menemukan satu.^\s+
perlu? Saya telah menguji kode Anda tanpa itu dan itu tidak berhasil, tetapi saya tidak tahu mengapa.re.compile("^\s*,\s*$")
, hasilnya adalah[' blah, lots , of , spaces, here ']
.^\s+
membuat. Seperti yang dapat Anda lihat sendiri,^\s*,\s*$
tidak memberikan hasil yang diinginkan. Jadi, jika Anda ingin berpisah dengan regexp, gunakan^\s+|\s*,\s*|\s+$
.Saya datang untuk menambahkan:
map(str.strip, string.split(','))
tetapi melihatnya sudah disebutkan oleh Jason Orendorff dalam komentar .
Membaca komentar Glenn Maynard dalam jawaban yang sama menyarankan daftar pemahaman atas peta saya mulai bertanya-tanya mengapa. Saya berasumsi dia bermaksud untuk alasan kinerja, tapi tentu saja dia mungkin bermaksud untuk alasan gaya, atau sesuatu yang lain (Glenn?).
Jadi tes cepat (mungkin cacat?) Pada kotak saya menerapkan tiga metode dalam satu lingkaran mengungkapkan:
membuat
map(str.strip, string.split(','))
pemenang, meskipun tampaknya mereka semua berada di stadion baseball yang sama.Tentu saja meskipun peta (dengan atau tanpa lambda) tidak harus dikesampingkan karena alasan kinerja, dan bagi saya itu setidaknya sejelas pemahaman daftar.
Edit:
Python 2.6.5 di Ubuntu 10.04
sumber
Hapus saja ruang putih dari string sebelum Anda membaginya.
sumber
"you just, broke this"
.Saya tahu ini sudah dijawab, tetapi jika Anda sering melakukan ini, ekspresi reguler mungkin cara yang lebih baik:
The
\s
cocok dengan karakter spasi, dan kami hanya menggantinya dengan string kosong''
. Anda dapat menemukan info lebih lanjut di sini: http://docs.python.org/library/re.html#re.subsumber
ini berfungsi baik untuk saya.
sumber
re
(seperti pada ekspresi reguler) memungkinkan pemisahan beberapa karakter sekaligus:Ini tidak berfungsi dengan baik untuk string contoh Anda, tetapi berfungsi dengan baik untuk daftar yang dipisahkan dengan koma-ruang. Untuk string contoh Anda, Anda bisa menggabungkan kekuatan re.split untuk membagi pada pola regex untuk mendapatkan efek "split-on-this-or-that".
Sayangnya, itu jelek, tetapi
filter
kemauan melakukan trik:Voila!
sumber
re.split(' *, *', string)
?re.split('[, ]*',string)
untuk efek yang sama.[, ]*
meninggalkan string kosong di akhir daftar. Saya pikir filter masih merupakan hal yang bagus untuk dilemparkan ke sana, atau tetap pada daftar pemahaman seperti jawaban teratas tidak.map(lambda s: s.strip(), mylist)
akan sedikit lebih baik daripada perulangan secara eksplisit. Atau untuk semuanya sekaligus:map(lambda s:s.strip(), string.split(','))
sumber
map
, terutama jika Anda menggunakannyalambda
, periksa ulang untuk melihat apakah Anda harus menggunakan pemahaman daftar.map(str.strip, s.split(','))
.sumber
Cukup, koma atau setidaknya satu spasi putih dengan / tanpa mendahului / menggantikan spasi putih.
Tolong coba!
sumber
map(lambda s: s.strip(), mylist)
akan sedikit lebih baik daripada perulangan secara eksplisit.Atau untuk semuanya sekaligus:
Itu pada dasarnya semua yang Anda butuhkan.
sumber