2012-09-17 31 views
221

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?Mục kết hợp trong danh sách theo chuỗi

Tôi có thể sử dụng chức năng str.join() để tham gia các mục trong danh sách không?

Ví dụ: đây là đầu vào ['this','is','a','sentence'] và đây là kết quả mong muốn this-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 
+9

''-'. Tham gia (câu)' – aland

Trả lời

461

Sử dụng join:

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

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

+4

@LawrenceDeSouza Chuỗi bạn muốn tham gia; xem [tài liệu] (https://docs.python.org/2/library/stdtypes.html#string-methods) hoặc [câu trả lời này] (http://stackoverflow.com/questions/1876191/explain-python -join) đi sâu hơn một chút. –

+1

Tôi cũng mong đợi 'sentence.join (" ")' hoạt động, vì hoạt động ngược lại là 'list.split (" ")'. Bất kỳ ý tưởng nếu điều này sẽ được thêm vào phương pháp Python cho danh sách? –

7

Mặc dù @Burhan Khalid's answer là tốt, tôi nghĩ rằng đó là dễ hiểu hơn như thế này:

from str import join 

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

join(sentence, "-") 

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

EDIT: Chức năng này đã được gỡ bỏ bằng Python 3

+6

[Chức năng này không được chấp nhận trong 2.x và sẽ bị xóa trong 3.x.] (https://docs.python.org/2/library/string.html#deprecated-string-functions) Đó là trường hợp , Tôi sẽ không khuyên bạn sử dụng điều này qua câu trả lời khác được cung cấp. –

+0

@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 nhiều cách khác nhau, vì vậy câu trả lời của ông cũng không được chấp nhận nữa. Nhưng cảm ơn vì đã chỉ ra rằng, 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

Anh ấy không được dùng nữa.Đề nghị của bạn sử dụng một hàm từ Lib/string.py mà hoàn toàn khác _and_ không được chấp nhận trong khi câu trả lời @BurhanKhalid sử dụng phương thức chuỗi dựng sẵn không được dùng nữa. Câu trả lời của anh ấy là câu trả lời đúng nhất hiện nay và tiếp tục trong khi điều này chỉ tốt cho đến ngày 2.x. –

57

Một cách chung chung hơn để chuyển đổi danh sách python để dây 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' 
+1

tại sao danh sách cần phải hiểu khi đầu vào là chuỗi? cũng 'bản đồ (str, my_lst)' sẽ là đủ mà không liệt kê danh sách =) – alvas

+4

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ó chuỗi trong đó. Mỏ 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à kiểu 'int' nhưng nó có thể là bất kỳ kiểu nào có thể được biểu diễn dưới dạng một chuỗi. –

+0

@alvas cảm ơn, đã cập nhật câu trả lời của tôi. –

15

Nó rất hữu ích cho người mới bắt đầu biết why join is a string method

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

Kết quả của việc tham gia luôn luôn là một chuỗi, nhưng đối tượng được tham gia có thể có nhiều loại (máy phát điện, danh sách, các bộ, vv)

.join là nhanh hơn bởi vì nó cấp phát bộ nhớ chỉ một lần. Tốt hơn là ghép nối cổ điển. extended explanation

Khi bạn đã học, 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(("(",")")) 
    '(1,2,3,4,5)' 

    >>> lista=["(",")"] 
    >>> ",".join("12345").join(lista) 
    '(1,2,3,4,5)' 
+0

Whoa, cool. Có upvote của tôi :) – Blacksilver

Các vấn đề liên quan