Apa yang akan menjadi cara pilihan Anda untuk menggabungkan string dari urutan sedemikian rupa sehingga antara setiap dua pasangan berturut-turut ditambahkan koma. Artinya, bagaimana Anda peta, misalnya, ['a', 'b', 'c']
untuk 'a,b,c'
? (Kasus ['s']
dan []
harus dipetakan ke 's'
dan ''
, masing-masing.)
Saya biasanya berakhir menggunakan sesuatu seperti ''.join(map(lambda x: x+',',l))[:-1]
, tetapi juga merasa agak tidak puas.
Kenapa
map
/lambda
sihir? Tidakkah ini berhasil?Jika ada nomor dalam daftar, Anda bisa menggunakan pemahaman daftar:
atau ekspresi generator:
sumber
",".join(l)
tidak akan bekerja untuk semua kasus. Saya sarankan menggunakan modul csv dengan StringIOsumber
StringIO
dalam Python 3from io import StringIO
dalam Python 3Berikut adalah solusi alternatif di Python 3.0 yang memungkinkan item daftar non-string:
cara standar
solusi alternatif
CATATAN: Ruang setelah koma disengaja.
sumber
Jangan hanya ingin:
Jelas itu menjadi lebih rumit jika Anda perlu mengutip / melarikan diri koma dll dalam nilai. Dalam hal ini saya menyarankan melihat modul csv di perpustakaan standar:
https://docs.python.org/library/csv.html
sumber
@Peter Hoffmann
Menggunakan ekspresi generator memiliki keuntungan juga menghasilkan iterator tetapi menghemat impor itertools. Selain itu, daftar pemahaman umumnya lebih disukai untuk dipetakan, oleh karena itu, saya berharap ekspresi generator lebih disukai untuk diterapkan.
sumber
my_list
dapat berisi semua jenis variabel. Ini menghindari hasilnya'A,,,D,E'
.sumber
sumber
@ jmanning2k menggunakan daftar pemahaman memiliki kelemahan membuat daftar sementara baru. Solusi yang lebih baik akan menggunakan itertools.imap yang mengembalikan iterator
sumber
str.join
bekerja lebih cepat denganlist
dibandingkan dengan generatorBerikut ini adalah contoh dengan daftar
Lebih tepat:-
Contoh 2: -
sumber
Saya akan mengatakan
csv
perpustakaan adalah satu-satunya pilihan yang masuk akal di sini, karena itu dibangun untuk mengatasi semua kasus penggunaan csv seperti koma dalam string, dll.Untuk menampilkan daftar
l
ke file .csv:Juga dimungkinkan untuk digunakan
writer.writerows(iterable)
beberapa baris ke csv.Contoh ini kompatibel dengan Python 3, karena jawaban lain
StringIO
yang digunakan di sini adalah Python 2.sumber
Kecuali saya melewatkan sesuatu,
','.join(foo)
harus melakukan apa yang Anda minta.(sunting: dan seperti yang ditunjukkan jmanning2k,
lebih aman dan cukup Pythonic, meskipun string yang dihasilkan akan sulit untuk diurai jika elemen dapat mengandung koma - pada saat itu, Anda memerlukan kekuatan penuh dari
csv
modul, seperti yang ditunjukkan oleh Douglas dalam jawabannya.)sumber
Dua sen saya. Saya suka lebih mudah kode satu baris dengan python:
Ini pythonic, berfungsi untuk string, angka, Tidak ada dan string kosong. Ini pendek dan memenuhi persyaratan. Jika daftar tidak akan berisi angka, kita dapat menggunakan variasi yang lebih sederhana ini:
Juga solusi ini tidak membuat daftar baru, tetapi menggunakan iterator, seperti @Peter Hoffmann menunjuk (terima kasih).
sumber