Kenapa string.join(list)
bukan list.join(string)
?
Ini karena join
metode "string"! Ini menciptakan string dari setiap iterable. Jika kita terjebak metode pada daftar, bagaimana ketika kita memiliki iterables yang bukan daftar?
Bagaimana jika Anda memiliki tuple string? Jika ini adalah list
metode, Anda harus melemparkan setiap iterator string seperti list
sebelum Anda dapat bergabung dengan elemen menjadi satu string! Sebagai contoh:
some_strings = ('foo', 'bar', 'baz')
Mari kita roll metode daftar bergabung kita sendiri:
class OurList(list):
def join(self, s):
return s.join(self)
Dan untuk menggunakannya, perhatikan bahwa kita harus terlebih dahulu membuat daftar dari setiap iterable untuk bergabung dengan string di iterable, membuang-buang memori dan kekuatan pemrosesan:
>>> l = OurList(some_strings) # step 1, create our list
>>> l.join(', ') # step 2, use our list join method!
'foo, bar, baz'
Jadi kami melihat kami harus menambahkan langkah ekstra untuk menggunakan metode daftar kami, daripada hanya menggunakan metode string bawaan:
>>> ' | '.join(some_strings) # a single step!
'foo | bar | baz'
Peringatan Kinerja untuk Generator
Algoritma yang digunakan Python untuk membuat string terakhir dengan str.join
benar - benar harus melewati iterable dua kali, jadi jika Anda memberikannya ekspresi generator, itu harus terwujud menjadi daftar terlebih dahulu sebelum dapat membuat string terakhir.
Dengan demikian, sementara membagikan generator biasanya lebih baik daripada daftar pemahaman, str.join
adalah pengecualian:
>>> import timeit
>>> min(timeit.repeat(lambda: ''.join(str(i) for i in range(10) if i)))
3.839168446022086
>>> min(timeit.repeat(lambda: ''.join([str(i) for i in range(10) if i])))
3.339879313018173
Namun demikian, str.join
operasi ini masih semantik operasi "string", sehingga masih masuk akal untuk memilikinya pada str
objek daripada pada iterables lain-lain.
-
nyatakan bahwa Anda bergabung dengan daftar dan mengonversi ke string. Berorientasi pada hasil.