Python: Làm thế nào để nối các mục nhập trong một tập hợp thành một chuỗi?


84

Về cơ bản, tôi đang cố gắng nối các mục nhập lại với nhau trong một tập hợp để xuất ra một chuỗi. Tôi đang cố gắng sử dụng cú pháp tương tự như hàm nối cho danh sách. Đây là nỗ lực của tôi:

list = ["gathi-109","itcg-0932","mx1-35316"]
set_1 = set(list)
set_2 = set(["mx1-35316"])
set_3 = set_1 - set_2
print set_3.join(", ")

Tuy nhiên, tôi gặp lỗi này: AttributeError: 'set' object has no attribute 'join'

Cách gọi tương đương cho các bộ là gì?

Câu trả lời:


165
', '.join(set_3)

Đây joinlà một phương thức chuỗi, không phải là một phương thức tập hợp.


14
nếu thiết lập của bạn chứa số nguyên / chờ đợi bạn phải sử dụng', '.join(str(s) for s in set_3)
55651909-089b-4e04-9408-47c5bf

31

Bộ không có joinphương thức nhưng bạn có thể sử dụng str.jointhay thế.

', '.join(set_3)

Các str.joinphương pháp sẽ làm việc trên bất kỳ đối tượng iterable bao gồm danh sách và bộ.

Lưu ý: hãy cẩn thận khi sử dụng điều này trên các tập hợp chứa số nguyên; bạn sẽ cần chuyển đổi các số nguyên thành chuỗi trước khi gọi tham gia. Ví dụ

set_4 = {1, 2}
', '.join(str(s) for s in set_4)

5

Các joinđược gọi là trên chuỗi:

print ", ".join(set_3)

4

Cũng không có setcũng không listcó phương thức như vậy join, chuỗi có nó:

','.join(set(['a','b','c']))

Nhân tiện, bạn không nên sử dụng tên listcho các biến của mình. Đặt tên cho nó list_, my_listhoặc một số tên khác vì listhàm python rất thường được sử dụng.


4

Set không có thứ tự - vì vậy bạn có thể bị mất thứ tự khi chuyển đổi danh sách của mình thành một tập hợp, tức là:

>>> orderedVars = ['0', '1', '2', '3']
>>> setVars = set(orderedVars)
>>> print setVars
('4', '2', '3', '1')

Nói chung, đơn đặt hàng sẽ vẫn còn, nhưng đối với những bộ lớn thì gần như chắc chắn sẽ không.

Cuối cùng, chỉ trong trường hợp mọi người đang thắc mắc, bạn không cần dấu ',' trong tham gia.

Just: '' .join (set)

:)


3

Tôi nghĩ rằng bạn chỉ có nó ngược lại.

print ", ".join(set_3)

Cú pháp không hợp lệ không? print(", ".join(set_3))
stephen

1
Nó có giá trị trong 2.7.
đệ quy

3

Bạn có câu lệnh tham gia ngược lại, hãy thử:

print ', '.join(set_3)

0

Tôi đã viết một phương thức xử lý các trường hợp cạnh sau:

  • Đặt kích thước một. A ", ".join({'abc'})sẽ trở lại "a, b, c". Đầu ra mong muốn của tôi là "abc".
  • Đặt bao gồm các số nguyên.
  • Tập hợp trống sẽ trả về ""
def set_to_str(set_to_convert, separator=", "):
        set_size = len(set_to_convert)
        if not set_size:
            return ""
        elif set_size == 1:
            (element,) = set_to_convert
            return str(element)
        else:
            return separator.join(map(str, set_to_convert))

Có thể đã sử dụng " ".join({'abc'})để có được o / p mong muốn "abc". mã thực thi trong repl.it
Abhijeet

Hấp dẫn. Chỉ cần nhận ra rằng tập hợp ('abc') và {'abc'} có các hành vi khác nhau. Đó là điều đã khiến tôi thất vọng.
Fernando Irarrázaval G

Tôi đã cập nhật mã thực thi để vận hành cho bộ & Từ điển
Abhijeet

FYI, {'abc'} là một tập hợp. Và "".join(set(ip_data))đưa ra thứ tự ngẫu nhiên của các chữ cái (ví dụ, 'bca') vì tập hợp tạo ra ba phần tử {'a', 'b', 'c'} nhưng không bảo toàn thứ tự.
Fernando Irarrázaval G
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.