Chính xác thì phương thức .join () làm gì?


209

Tôi khá mới với Python và tôi hoàn toàn bối rối bởi .join()vì tôi đã đọc là phương pháp ưa thích để nối chuỗi.

Tôi đã thử:

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

và có một cái gì đó như:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5

Tại sao nó hoạt động như thế này? Không nên 595chỉ tự động được thêm vào?


1
Tôi nghĩ rằng bạn đã gõ Yubikey của bạn trong khi chương trình đang chạy
Trenton

Câu trả lời:


303

Nhìn kỹ vào đầu ra của bạn:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

Tôi đã đánh dấu "5", "9", "5" của chuỗi ban đầu của bạn. join()Phương thức Python là một phương thức chuỗi và lấy danh sách các thứ để nối với chuỗi. Một ví dụ đơn giản hơn có thể giúp giải thích:

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

"," Được chèn giữa mỗi thành phần của danh sách đã cho. Trong trường hợp của bạn, "danh sách" của bạn là đại diện chuỗi "595", được coi là danh sách ["5", "9", "5"].

Có vẻ như bạn đang tìm kiếm +thay thế:

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

1
Tại sao không phải là: 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5wlfgALGbXOahekxSs? Với chuỗi được nối vào phần tử cuối cùng?
Matt McCormick

10
Một lý do là điều này mang lại đặc jointính hữu ích là nghịch đảo của split( docs.python.org/l Library / stdtypes.html # str.split )
cobbal

4
Nếu bạn muốn một dấu phân cách khác, hãy đặt một chuỗi trống ở cuối danh sách của bạn. ','.join(['a', 'b', 'c', ''])đưa ra "a, b, c,"
tgray

9
OP có lẽ đã nhầm lẫn string.joinvới os.path.joinnhững con đường thực sự nối liền
Juan Campa

91

joincó một điều lặp đi lặp lại như là một đối số. Thông thường đó là một danh sách. Vấn đề trong trường hợp của bạn là một chuỗi có thể lặp lại được, lần lượt đưa ra từng ký tự. Mã của bạn phá vỡ điều này:

"wlfgALGbXOahekxSs".join("595")

hành động tương tự như thế này:

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

và do đó tạo ra chuỗi của bạn:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

Chuỗi như iterables là một trong những vấn đề bắt đầu khó hiểu nhất với Python.


8
upvote để chỉ ra những gì có thể là mấu chốt của sự nhầm lẫn: các chuỗi có thể lặp lại để chúng hoạt động như danh sách các ký tự.
Daniel Baird

59

Để nối một chuỗi, chỉ cần nối chuỗi đó với +dấu.

Ví dụ

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

joinkết nối các chuỗi với nhau bằng một dải phân cách. Dấu phân cách là những gì bạn đặt ngay trước join. Ví dụ

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

Tham gia có một danh sách các chuỗi như là một tham số.


5
Loại câu trả lời trực tiếp và súc tích này cần được cộng đồng của chúng tôi ủng hộ. @ Dan
DehengYe

7

tham gia () là để nối tất cả các thành phần danh sách. Để nối chỉ hai chuỗi "+" sẽ có ý nghĩa hơn:

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

4

Để mở rộng thêm một chút về những gì người khác đang nói, nếu bạn muốn sử dụng phép nối để đơn giản nối hai chuỗi của mình, bạn sẽ làm điều này:

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

2

Có một lời giải thích tốt về lý do tại sao nó lại tốn kém khi sử dụng +để nối một số lượng lớn các chuỗi ở đây

Toán tử Plus là giải pháp hoàn hảo tốt để nối hai chuỗi Python. Nhưng nếu bạn tiếp tục thêm nhiều hơn hai chuỗi (n> 25), bạn có thể muốn nghĩ điều gì khác.

''.join([a, b, c]) lừa là tối ưu hóa hiệu suất.


0

Về việc cung cấp này như là đầu vào,

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

Python trả về điều này như đầu ra:

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

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

Nếu đây là một đầu vào, sử dụng phương thức THAM GIA, chúng ta có thể thêm khoảng cách giữa các từ và cũng có thể chuyển đổi danh sách thành chuỗi.

Đây là đầu ra Python

'my name is kourosh'

0

"" .join có thể được sử dụng để sao chép chuỗi trong danh sách vào một biến

>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.