Memisahkan string dan menghapus spasi Python

Saya ingin membagi sebuah String dengan koma ',' dan menghapus spasi dari awal dan akhir setiap pemisahan.

Misalnya, jika saya memiliki string:

"QVOD, Baidu Player"

Saya ingin membagi dan mengupas menjadi:

['QVOD', 'Baidu Player']

Apakah ada cara yang elegan untuk melakukan ini? Mungkin menggunakan pemahaman daftar?


person Daniel Pilch    schedule 21.01.2014    source sumber
comment
Apakah format datanya akan selalu sama?   -  person thefourtheye    schedule 21.01.2014
comment
Kemungkinan duplikat dari pertanyaan ini. Tidak sepenuhnya, namun Anda bisa menemukan semua jawaban yang Anda perlukan di sana.   -  person Kraay89    schedule 21.01.2014
comment
@ Kraay89 Ini bukan duplikat dari pertanyaan yang Anda tautkan.   -  person Toby Allen    schedule 20.02.2014


Jawaban (2)


Python memiliki fungsi spektakuler bernama split yang membuat Anda tidak perlu menggunakan regex atau yang serupa. Anda dapat membagi string Anda hanya dengan menelepon my_string.split(delimiter)

Setelah itu python memiliki fungsi strip yang akan menghapus semua spasi dari awal dan akhir string.

[item.strip() for item in my_string.split(',')]

Tolok ukur untuk kedua metode tersebut adalah sebagai berikut:

>>> import timeit
>>> timeit.timeit('map(str.strip, "QVOD, Baidu Player".split(","))', number=100000)
0.3525350093841553
>>> timeit.timeit('map(stripper, "QVOD, Baidu Player".split(","))','stripper=str.strip', number=100000)
0.31575989723205566
>>> timeit.timeit("[item.strip() for item in 'QVOD, Baidu Player'.split(',')]", number=100000)
0.246596097946167

Jadi kompilasi daftarnya sekitar 33% lebih cepat daripada peta.

Mungkin juga patut dicatat bahwa sejauh menyangkut "pythonic", Guido sendiri yang memilih LC. http://www.artima.com/weblogs/viewpost.jsp?thread=98196

person Slater Victoroff    schedule 21.01.2014
comment
@DSM Ups, salahku. Terima kasih telah menangkapnya. - person Slater Victoroff; 21.01.2014
comment
Terima kasih, saya sudah mencoba sesuatu seperti ini dan setiap bagian QVOD dll.. ditempatkan di baris baru. Jawaban di bawah ini berfungsi dengan baik karena semuanya ada dalam daftar. - person Daniel Pilch; 21.01.2014
comment
@DanielPilch: kedua metode menghasilkan daftar yang sama. - person DSM; 21.01.2014
comment
@SlaterTyranus Silakan periksa kode yang diperbarui. Ini mungkin bekerja hampir secepat LC. - person thefourtheye; 21.01.2014
comment
@thefourteye Ini lebih cepat dari versi lainnya, tapi masih terasa lebih lambat dari LC - person Slater Victoroff; 21.01.2014
comment
@SlaterTyranus Harap dicatat bahwa ini bervariasi dari mesin ke mesin. Periksa hasilnya di mesin saya :) - person thefourtheye; 21.01.2014
comment
Ya Anda benar, saya sedang mencetak item dan tidak membuat daftar dari pemahaman categories = [item.strip() for item in my_string.split(',')] kesalahan konyol dan ya lebih cepat, terima kasih! - person Daniel Pilch; 21.01.2014
comment
@StevenRumbalski Argumen antara fungsi LC dan map, reduce, filter cukup kuat, jadi menurut saya tidak perlu banyak diskusi, tetapi ditautkan ke artikel untuk mencoba mencakup aspek tersebut. - person Slater Victoroff; 21.01.2014

Sedikit pendekatan fungsional. Fungsi split, membagi string berdasarkan , dan setiap elemen akan dihilangkan oleh str.strip, oleh map.

>>> stripper = str.strip
>>> map(stripper, "QVOD, Baidu Player".split(","))
['QVOD', 'Baidu Player']

Sedikit perbandingan waktu

import timeit
stripper = str.strip
print timeit.timeit('map(stripper, "QVOD, Baidu Player".split(","))', "from __main__ import stripper", number=100000)
print timeit.timeit("[item.strip() for item in 'QVOD, Baidu Player'.split(',')]", number=100000)

Keluaran di mesin saya

0.553178071976
0.569463968277

Jadi, baik metode pemahaman Daftar maupun metode map memiliki kinerja yang hampir sama.

person thefourtheye    schedule 21.01.2014
comment
Mengapa Anda menugaskan str.strip ke suatu variabel? Kenapa tidak diteruskan langsung -map(str.strip, "QVOD, Baidu Player".split(",")) - person pyrospade; 21.01.2014
comment
@pyrospade Itu tidak harus didapat dari str setiap saat. Jadi, sedikit peningkatan kinerja :) - person thefourtheye; 21.01.2014
comment
@thefourtheye Benarkah? Saya membayangkan bahwa ketika Anda meneruskan str.strip ke map(function, sequence) itu ditugaskan ke parameter function dan digunakan secara lokal sebagai variabel di sana. - person pyrospade; 21.01.2014
comment
@thefourtheye Versi python apa yang Anda jalankan? - person Slater Victoroff; 21.01.2014