Apa sebenarnya yang dilakukan metode .join ()?


209

Saya cukup baru untuk Python dan saya benar-benar bingung dengan .join()yang saya baca adalah metode yang disukai untuk merangkai string.

Saya mencoba:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring().join(strid)

dan mendapat sesuatu seperti:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5

Mengapa ini bekerja seperti ini? Bukankah seharusnya 595hanya ditambahkan secara otomatis?


1
Saya pikir Anda mengetuk Yubikey Anda saat program sedang berjalan
— Trenton

Jawaban:


303

Perhatikan baik-baik output Anda:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

Saya telah menyoroti "5", "9", "5" dari string asli Anda. join()Metode Python adalah metode string, dan mengambil daftar hal-hal untuk bergabung dengan string. Contoh sederhana dapat membantu menjelaskan:

>>> ",".join(["a", "b", "c"])
'a,b,c'

"," Dimasukkan di antara setiap elemen dari daftar yang diberikan. Dalam kasus Anda, "daftar" Anda adalah representasi string "595", yang diperlakukan sebagai daftar ["5", "9", "5"].

Tampaknya Anda mencari yang +sebaliknya:

print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid

1
Mengapa tidak: 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5wlfgALGbXOahekxSs? Dengan string yang ditambahkan ke elemen terakhir?
— Matt McCormick

10
Salah satu alasannya adalah ini memberikan joinproperti yang berguna sebagai kebalikan dari split( docs.python.org/library/stdtypes.html#str.split )
— cobbal

4
Jika Anda ingin pembatas lain, letakkan string kosong di akhir daftar Anda. ','.join(['a', 'b', 'c', ''])memberikan "a, b, c,"
— tgray

9
OP mungkin bingung string.joindengan os.path.joinjalur mana yang memang berada
— Juan Campa

91

joinmengambil hal yang dapat diubah sebagai argumen. Biasanya daftar. Masalah dalam kasus Anda adalah bahwa string itu sendiri dapat diubah, memberikan masing-masing karakter secara bergantian. Kode Anda rusak menjadi ini:

"wlfgALGbXOahekxSs".join("595")

yang bertindak sama seperti ini:

"wlfgALGbXOahekxSs".join(["5", "9", "5"])

dan menghasilkan string Anda:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

String sebagai iterables adalah salah satu masalah awal yang paling membingungkan dengan Python.


8
memilih untuk menunjukkan apa yang mungkin menjadi inti dari kebingungan: string dapat diubah sehingga mereka bertindak seperti daftar karakter.
— Daniel Baird

59

Untuk menambahkan string, cukup menyatukannya dengan +tanda.

Misalnya

>>> a = "Hello, "
>>> b = "world"
>>> str = a + b
>>> print str
Hello, world

joinmenghubungkan string bersama dengan pemisah. Pemisah adalah apa yang Anda tempatkan tepat sebelum join. Misalnya

>>> "-".join([a,b])
'Hello, -world'

Bergabung mengambil daftar string sebagai parameter.


5
Jawaban langsung dan ringkas semacam ini harus didukung oleh komunitas kami. @ Dan
— DehengYe

7

join () adalah untuk menggabungkan semua elemen daftar. Untuk menggabungkan hanya dua string "+" akan lebih masuk akal:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring() + strid

4

Untuk sedikit lebih memperluas apa yang orang lain katakan, jika Anda ingin menggunakan gabungan untuk hanya menggabungkan dua string Anda, Anda akan melakukan ini:

strid = repr(595)
print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring(), strid])

2

Ada penjelasan yang bagus tentang mengapa mahal +untuk menggabungkan beberapa string di sini

Operator Plus adalah solusi yang sangat baik untuk menggabungkan dua string Python. Tetapi jika Anda terus menambahkan lebih dari dua string (n> 25), Anda mungkin ingin memikirkan hal lain.

''.join([a, b, c]) Trik adalah optimasi kinerja.


0

Untuk memberikan ini sebagai input,

li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
s = ";".join(li)
print(s)

Python mengembalikan ini sebagai output:

'server=mpilgrim;uid=sa;database=master;pwd=secret'

0
list = ["my", "name", "is", "kourosh"]   
" ".join(list)

Jika ini adalah input, menggunakan metode GABUNG, kita dapat menambahkan jarak antara kata-kata dan juga mengkonversi daftar ke string.

Ini adalah output Python

'my name is kourosh'

0

"" .join dapat digunakan untuk menyalin string dalam daftar ke variabel

>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.