Sử dụng dấu ngoặc nhọn để khởi tạo một Tập hợp trong Python


98

Tôi đang học python và tôi có một câu hỏi mới làm quen về việc khởi tạo bộ. Qua thử nghiệm, tôi đã phát hiện ra rằng một tập hợp có thể được khởi tạo như vậy:

my_set = {'foo', 'bar', 'baz'}

Có bất kỳ nhược điểm nào khi làm theo cách này không, trái ngược với cách tiêu chuẩn:

my_set = set(['foo', 'bar', 'baz'])

hay nó chỉ là một câu hỏi về phong cách?


2
Tài liệu có đề cập đến nó, chỉ là không có. Lưu ý rằng đó là tài liệu cho một mô-đun không được dùng nữa, các bộ thực hiện đã được tích hợp sẵn. Đó là trong "Có gì mới trong Python 2.7" tài liệu, và một thời gian ngắn tham khảo ngôn ngữ mô tả nó: docs.python.org/2/reference/expressions.html#set-displays

@delnan Tôi sử dụng python 2.7, vì vậy tôi không nghĩ phải xem trong tài liệu python 3. Liên kết tôi đã đăng là cho 2.7, nhưng kỳ lạ là nó không đề cập đến điều này.
fvrghl

1
Kể từ khi tôi chỉnh sửa bình luận của mình, 2.7 tài liệu cũng đề cập đến điều này. Liên kết bạn đăng đã lỗi thời, một di tích của quá khứ, sai, không còn được dùng nữa. Quên rằng nó tồn tại và sử dụng những gì nó tự nói với bạn để sử dụng thay vì: docs.python.org/2/library/stdtypes.html#setdocs.python.org/2/library/stdtypes.html#frozenset

@delnan Cảm ơn vì đã giúp tôi. Tôi đã chỉnh sửa câu hỏi để không còn nói rằng không có tài liệu nào cho nó (mặc dù có rất ít ví dụ đề cập đến vấn đề này trực tuyến).
fvrghl

Đối với người qua đường bởi: Pycharm cảnh báo chống lại bằng một cuộc gọi chức năng khi người ta có thể sử dụng một chữ - có thể có lý do hiệu suất - vì vậy làm thích tập cách chữ trong mã mới
Mr_and_Mrs_D

Câu trả lời:


102

Có hai vấn đề rõ ràng với cú pháp chữ đã đặt:

my_set = {'foo', 'bar', 'baz'}
  1. Nó không có sẵn trước Python 2.7

  2. Không có cách nào để diễn đạt một tập hợp trống bằng cú pháp đó (sử dụng {}tạo ra một chính tả trống)

Những điều đó có thể có hoặc không quan trọng đối với bạn.

Phần tài liệu phác thảo cú pháp này ở đây .


46

Cũng so sánh sự khác biệt giữa {}set()với một đối số từ.

>>> a = set('aardvark')
>>> a
{'d', 'v', 'a', 'r', 'k'} 
>>> b = {'aardvark'}
>>> b
{'aardvark'}

nhưng cả hai abđều là tập hợp tất nhiên.


4
đó là lý do tại sao tôi muốn nhắc nhở bản thân về phương thức khởi tạo set set([])hơn là chỉ set().
Michael Ekoka

3
set()luôn luôn có một đối số duy nhất. Một lần lặp lại duy nhất.
George Kettleborough

1
@GeorgeKettleborough một hoặc không có đối số, đối số thứ hai để tạo một tập hợp trống.
gertvdijk

28

Từ tài liệu Python 3 ( giữ nguyên tương tự cho python 2.7 ):

Dấu ngoặc nhọn hoặc hàm set () có thể được sử dụng để tạo tập hợp. Lưu ý: để tạo một tập hợp trống, bạn phải sử dụng set (), không phải {}; phần sau tạo ra một từ điển trống, một cấu trúc dữ liệu mà chúng ta sẽ thảo luận trong phần tiếp theo.

trong python 2.7:

>>> my_set = {'foo', 'bar', 'baz', 'baz', 'foo'}
>>> my_set
set(['bar', 'foo', 'baz'])

Hãy lưu ý rằng {}nó cũng được sử dụng cho map/ dict:

>>> m = {'a':2,3:'d'}
>>> m[3]
'd'
>>> m={}
>>> type(m)
<type 'dict'> 

Người ta cũng có thể sử dụng cú pháp toàn diện để khởi tạo bộ:

>>> a = {x for x in """didn't know about {} and sets """ if x not in 'set' }
>>> a
set(['a', ' ', 'b', 'd', "'", 'i', 'k', 'o', 'n', 'u', 'w', '{', '}'])

1

Bạn cần làm gì empty_set = set()để khởi tạo một tập hợp trống. {}là từ điển trống rỗng.

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.