Jawaban:
Gunakan joinmetode string kosong untuk menggabungkan semua string bersama-sama dengan string kosong di antaranya, seperti:
>>> a = ['a', 'b', 'c', 'd']
>>> ''.join(a)
'abcd'
' '.join(list)dengan spasi di antara tanda kutip
"".join(['a','b','c'])berarti Join all elements of the array, separated by the string "". Dengan cara yang sama, " hi ".join(["jim", "bob", "joe"])akan dibuat "jim hi bob hi joe".
Ini berfungsi dalam banyak bahasa populer seperti JavaScript dan Ruby, mengapa tidak menggunakan Python?
>>> ['a', 'b', 'c'].join('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'join'
Cukup aneh, dengan Python joinmetode ini ada di strkelas:
# this is the Python way
"".join(['a','b','c','d'])
Mengapa joinbukan metode pada listobjek seperti pada JavaScript atau bahasa skrip populer lainnya? Ini adalah salah satu contoh bagaimana komunitas Python berpikir. Karena bergabung adalah mengembalikan string, itu harus ditempatkan di kelas string, bukan pada kelas daftar, jadi str.join(list)metode ini berarti: bergabung dengan daftar ke string baru menggunakan strsebagai pemisah (dalam hal ini stradalah string kosong).
Entah bagaimana saya harus menyukai cara berpikir ini setelah beberapa saat. Saya bisa mengeluh tentang banyak hal dalam desain Python, tetapi tidak tentang koherensinya.
string.join()dengan kebanyakan koleksi yang memiliki join()metode dalam banyak bahasa dinamis. Tentang iterables, saya kira itu bukan masalah untuk bahasa seperti itu karena itu mudah (dan dapat dibaca) untuk menyertakan iterable dalam koleksi konstruktor dan rantai dalam join()metode ini.
Jika juru bahasa Python Anda sudah tua (1.5.2, misalnya, yang umum pada beberapa distribusi Linux yang lebih lama), Anda mungkin tidak join()tersedia sebagai metode pada objek string lama, dan Anda harus menggunakan modul string. Contoh:
a = ['a', 'b', 'c', 'd']
try:
b = ''.join(a)
except AttributeError:
import string
b = string.join(a, '')
String bakan menjadi 'abcd'.
Ini mungkin cara tercepat:
>> from array import array
>> a = ['a','b','c','d']
>> array('B', map(ord,a)).tostring()
'abcd'
''.join(['a','b','c'])
map(ord,a)tidak perlu, tetapi bergabung dengan kebutuhan map(chr,a). Ini patokan pastebin.com/1sKFm8ma
''.join()jauh lebih mudah dibaca.
Fungsi pengurangan juga berfungsi
import operator
h=['a','b','c','d']
reduce(operator.add, h)
'abcd'
(reduce + '' h)atau (apply + h)akan berhasil. Tetapi sekali lagi, dalam Python, operator add mengambil tepat 2 operan, maka kebutuhan untuk mengurangi. Jika tidak, Anda dapat melakukannya operator.add(*h), karena applytelah secara resmi ditinggalkan dalam Python untuk sintaks panggilan yang diperpanjang (alias en.wikipedia.org/wiki/Variadic_function )
Jika daftar berisi nomor, Anda dapat menggunakan map()dengan join().
Misalnya:
>>> arr = [3, 30, 34, 5, 9]
>>> ''.join(map(str, arr))
3303459
''.join([str(i) for i in arr])
h = ['a','b','c','d','e','f']
g = ''
for f in h:
g = g + f
>>> g
'abcdef'
''.join(h)akan jauh melampaui metode penambahan satu-per-satu Anda.
selain itu str.joinyang merupakan cara paling alami, kemungkinannya adalah menggunakan io.StringIOdan menyalahgunakan writelinesuntuk menulis semua elemen sekaligus:
import io
a = ['a','b','c','d']
out = io.StringIO()
out.writelines(a)
print(out.getvalue())
cetakan:
abcd
Ketika menggunakan pendekatan ini dengan fungsi generator atau iterable yang bukan a tupleatau a list, itu menyimpan pembuatan daftar sementara yang jointidak mengalokasikan ukuran yang tepat dalam sekali jalan (dan daftar string 1 karakter sangat mahal dari segi memori ).
Jika Anda kekurangan memori dan Anda memiliki objek yang dievaluasi malas sebagai input, pendekatan ini adalah solusi terbaik.
Anda juga bisa menggunakan operator.concat()seperti ini:
>>> from operator import concat
>>> a = ['a', 'b', 'c', 'd']
>>> reduce(concat, a)
'abcd'
Jika Anda menggunakan Python 3, Anda harus menambahkan:
>>> from functools import reduce
sejak builtin reduce()telah dihapus dari Python 3 dan sekarang tinggal di functools.reduce().