Mục nối trong danh sách thành chuỗi


574

Có cách nào đơn giản hơn để nối các mục chuỗi trong danh sách thành một chuỗi không? Tôi có thể sử dụng str.join()chức năng?

Ví dụ: đây là đầu vào ['this','is','a','sentence']và đây là đầu ra mong muốnthis-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

24
'-'.join(sentence)
aland

Câu trả lời:


1053

Sử dụng join:

>>> sentence = ['this','is','a','sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'

13
Không hiểu, '-' bên trái được cho là gì ??
Lawrence DeSouza

5
@LawrenceDeSouza Chuỗi bạn muốn tham gia; xem tài liệu , hoặc câu trả lời này đi sâu vào chi tiết hơn một chút.
Burhan Khalid

9
Tôi dự kiến ​​sẽ sentence.join(" ")làm việc tốt, vì hoạt động ngược lại list.split(" "). Bất kỳ ý tưởng nếu điều này sẽ được thêm vào phương thức của Python cho danh sách?
Wouter Thielen

10
@Wouter, nó sẽ không. Một mặt, chỉ có danh sách các chuỗi có thể được nối; vì vậy list.joinsẽ không phù hợp cho một danh sách tùy ý. Mặt khác, đối số str.joincó thể là bất kỳ chuỗi "lặp lại" nào, không chỉ là một danh sách. Điều duy nhất có ý nghĩa là một chức năng tích hợp join(list, sep); có một trong stringmô-đun (về cơ bản đã lỗi thời) nếu bạn thực sự muốn nó.
alexis

4
@Leo' '.join(['this', 'is', 'a', 'sentence'])
Burhan Khalid

120

Một cách chung hơn để chuyển đổi danh sách python thành chuỗi sẽ là:

>>> 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'

3
Tại sao việc hiểu danh sách cần thiết khi đầu vào là chuỗi? cũng map(str, my_lst)sẽ là đủ mà không cần liệt kê danh sách =)
alvas

5
Hầu hết các câu trả lời cho câu hỏi này đang xem xét trường hợp khi danh sách có các chuỗi trong đó. Của tôi là một cách chung để chuyển đổi danh sách thành chuỗi. Trong ví dụ của tôi, danh sách là loại intnhưng nó có thể là bất kỳ loại nào có thể được biểu diễn dưới dạng chuỗi.
6pack bé 2/12/2015

3
Để thêm vào điều này, bản đồ cũng sẽ hữu ích khi được sử dụng với chức năng lambda. Ví dụ ' '.join(map(lambda x: ' $'+ str(x), my_lst))sẽ trở lại'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
ScottMcC

3
thêm một bản đồ thực sự giúp với các kiểu dữ liệu ngoài chuỗi. Tuyệt quá!
appleboy

40

Nó rất hữu ích cho người mới bắt đầu biết tại sao tham gia là một phương thức chuỗi .

Ban đầu nó rất lạ, nhưng rất hữu ích sau việc này.

Kết quả của phép nối luôn là một chuỗi, nhưng đối tượng được nối có thể có nhiều loại (trình tạo, danh sách, bộ dữ liệu, v.v.).

.joinnhanh hơn vì nó chỉ phân bổ bộ nhớ một lần. Tốt hơn so với nối cổ điển (xem, giải thích mở rộng ).

Khi bạn học nó, nó rất thoải mái và bạn có thể thực hiện các thủ thuật như thế này để thêm dấu ngoặc đơn.

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

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

12

Mặc dù câu trả lời của @Burhan Khalid là tốt, tôi nghĩ nó dễ hiểu hơn như thế này:

from str import join

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

join(sentence, "-") 

Đối số thứ hai để tham gia () là tùy chọn và mặc định là "".

EDIT: Hàm này đã bị xóa trong Python 3


14
Hàm này không được dùng trong 2.x và sẽ bị xóa trong 3.x. Trong trường hợp đó, tôi không khuyên bạn nên sử dụng câu trả lời này cho câu trả lời khác được cung cấp.
Matthew Green

@Mathew Green câu trả lời này và câu trả lời của Burhan Khalid sử dụng cùng một chức năng theo những cách khác nhau, vì vậy câu trả lời của anh ấy cũng không được chấp nhận. Nhưng cảm ơn vì đã chỉ ra điều đó, gota tìm ra cách tham gia vào 3.x. Nhưng nếu bạn đang sử dụng 2.x, nó sẽ không biến mất.
SilentVoid

1
Mặc dù vậy anh ấy không được tán thành. Đề xuất của bạn sử dụng một hàm từ Lib / string.py hoàn toàn khác biệt không được chấp nhận trong khi câu trả lời @BurhanKhalid sử dụng phương thức chuỗi tích hợp không bị phản đối. Câu trả lời của anh ấy là câu trả lời đúng nhất bây giờ và tiếp tục trong khi điều này chỉ tốt cho bây giờ trên 2.x.
Matthew Green

Tất cả điều đó để nói rằng nếu bạn muốn thúc đẩy sự thay thế này, bạn cũng nên bao gồm một cảnh báo rằng điều này không được khuyến khích vì những lý do được nêu trong các bình luận trước đây của tôi.
Matthew Green

2

Chúng ta có thể chỉ định cách chúng ta phải tham gia chuỗi. Thay vì '-', chúng ta có thể sử dụng ''

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

2

Chúng tôi cũng có thể sử dụng Python của giảm chức năng:

from functools import reduce

sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)

4
Quá phức tạp không cần thiết, tại sao không sử dụng 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)

2
Mặc dù đoạn mã này có thể là giải pháp, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
alan.elkin
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.