Menggabungkan item dalam daftar ke string

575

Apakah ada cara yang lebih sederhana untuk menggabungkan item string dalam daftar menjadi string tunggal? Bisakah saya menggunakan str.join()fungsinya?

Misal ini adalah input ['this','is','a','sentence']dan ini adalah output yang diinginkanthis-is-a-sentence

sentence = ['this','is','a','sentence']
sent_str = ""
for i in sentence:
    sent_str += str(i) + "-"
sent_str = sent_str[:-1]
print sent_str
alva
sumber
24
'-'.join(sentence)
aland

Jawaban:

1054

Gunakan join:

>>> sentence = ['this','is','a','sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'
Burhan Khalid
sumber
13
Tidak mengerti, apa '-' di sebelah kiri seharusnya ??
Lawrence DeSouza
5
@LawrenceDeSouza String yang ingin Anda gabungkan; lihat dokumentasi , atau jawaban ini yang lebih detail.
Burhan Khalid
9
Saya agak diharapkan sentence.join(" ")bekerja juga, karena operasi sebaliknya list.split(" "). Adakah ide jika ini akan ditambahkan ke metode Python untuk daftar?
Wouter Thielen
10
@Wouter, tidak akan. Di satu sisi, hanya daftar string yang dapat digabungkan; jadi list.jointidak pantas untuk daftar yang sewenang-wenang. Di sisi lain, argumen dari str.joinbisa menjadi urutan string "iterable", bukan hanya daftar. Satu-satunya hal yang masuk akal adalah fungsi bawaan join(list, sep); ada satu di stringmodul (pada dasarnya usang) jika Anda benar-benar menginginkannya.
alexis
4
@ Leo' '.join(['this', 'is', 'a', 'sentence'])
Burhan Khalid
120

Cara yang lebih umum untuk mengonversi daftar python menjadi string adalah:

>>> my_lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> my_lst_str = ''.join(map(str, my_lst))
>>> print(my_lst_str)
'12345678910'
6 pak anak
sumber
3
mengapa pemahaman daftar diperlukan ketika input adalah string? juga map(str, my_lst)akan cukup tanpa menyebutkan daftar =)
alvas
5
Sebagian besar jawaban untuk pertanyaan ini mempertimbangkan kasus ketika daftar memiliki string di dalamnya. Milik saya adalah cara umum untuk mengonversi daftar menjadi string. Dalam contoh saya, daftarnya adalah tipe inttetapi bisa berupa tipe apa saja yang dapat direpresentasikan sebagai string.
6pack anak
3
Untuk menambah ini, peta juga akan berguna ketika digunakan dengan fungsi lambda. Sebagai contoh ' '.join(map(lambda x: ' $'+ str(x), my_lst))akan kembali'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
ScottMcC
3
menambahkan peta sebenarnya membantu dengan tipe data terpisah dari string. Bagus!
appleboy
40

Ini sangat berguna bagi pemula untuk mengetahui mengapa bergabung adalah metode string .

Ini sangat aneh di awal, tetapi sangat berguna setelah ini.

Hasil join selalu berupa string, tetapi objek yang akan digabung bisa dari banyak jenis (generator, daftar, tupel, dll).

.joinlebih cepat karena hanya mengalokasikan memori sekali. Lebih baik daripada penggabungan klasik (lihat penjelasan panjang lebar ).

Setelah Anda mempelajarinya, sangat nyaman dan Anda dapat melakukan trik seperti ini untuk menambahkan tanda kurung.

>>> ",".join("12345").join(("(",")"))
Out:
'(1,2,3,4,5)'

>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,5)'
Wallebot
sumber
12

Meskipun jawaban @ Burhan Khalid bagus, saya pikir lebih masuk akal seperti ini:

from str import join

sentence = ['this','is','a','sentence']

join(sentence, "-") 

Argumen kedua untuk bergabung () adalah opsional dan default ke "".

EDIT: Fungsi ini dihapus dalam Python 3

SilentVoid
sumber
14
Fungsi ini ditinggalkan dalam 2.x dan akan dihapus dalam 3.x. Karena itu, saya tidak akan merekomendasikan menggunakan ini dari jawaban lain yang diberikan.
Matthew Green
@Mathew Green jawaban ini dan jawaban Burhan Khalid menggunakan fungsi yang sama dengan cara yang berbeda, jadi jawabannya sudah usang juga. Tapi terima kasih telah menunjukkannya, gota mencari tahu cara bergabung di 3.x. Tetapi jika Anda menggunakan 2.x, itu tidak akan hilang.
SilentVoid
1
Tapi itu tidak usang. Rekomendasi Anda menggunakan fungsi dari Lib / string.py yang sepenuhnya berbeda dan usang sedangkan jawaban @ BurhanKhalid menggunakan metode string bawaan yang tidak usang. Jawabannya adalah yang paling benar sekarang dan maju sedangkan ini hanya baik untuk saat ini di 2.x.
Matthew Green
Semua itu untuk mengatakan bahwa jika Anda ingin mempromosikan alternatif ini, Anda juga harus memasukkan peringatan bahwa ini tidak dianjurkan karena alasan yang diuraikan dalam komentar saya sebelumnya.
Matthew Green
2

Kita dapat menentukan bagaimana kita harus bergabung dengan string. Alih-alih '-', kita bisa menggunakan ''

sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)
Abhishek V
sumber
2

Kita juga bisa menggunakan fungsi pengurangan Python :

from functools import reduce

sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)
Nishkarsh Dixit
sumber
4
Kompleksitas yang terlalu banyak tidak dibutuhkan, mengapa tidak hanya menggunakan join?
Sebastian Palma
-1
def eggs(someParameter):
    del spam[3]
    someParameter.insert(3, ' and cats.')


spam = ['apples', 'bananas', 'tofu', 'cats']
eggs(spam)
spam =(','.join(spam))
print(spam)
Pyte
sumber
2
Sementara cuplikan kode ini mungkin solusinya, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda.
alan.elkin