set

Báo cáo vấn đề Xem nguồn Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Loại tập hợp tích hợp. Tập hợp là một tập hợp có thể lặp lại, có thể thay đổi gồm các giá trị riêng biệt – các phần tử của tập hợp. Tên loại của một tập hợp là "set".

Tập hợp cung cấp các thao tác có thời gian không đổi để chèn, xoá hoặc kiểm tra sự hiện diện của một giá trị. Các tập hợp được triển khai bằng bảng băm, do đó, giống như các khoá của một từ điển, các phần tử của một tập hợp phải có thể băm. Bạn có thể dùng một giá trị làm phần tử của một tập hợp nếu và chỉ khi bạn có thể dùng giá trị đó làm khoá của một từ điển.

Bạn có thể tạo các tập hợp bằng hàm tích hợp set(). Hàm này trả về một tập hợp mới chứa các phần tử riêng biệt của đối số không bắt buộc (phải là một đối tượng có thể lặp lại). Gọi set() mà không có đối số sẽ tạo một tập hợp trống. Tập hợp không có cú pháp theo nghĩa đen.

Các thao tác innot in kiểm tra xem một giá trị có nằm trong một tập hợp hay không:

s = set(["a", "b", "c"])
"a" in s  # True
"z" in s  # False

Một tập hợp có thể lặp lại và do đó có thể được dùng làm toán hạng của một vòng lặp for, một biểu thức danh sách và nhiều hàm tích hợp hoạt động trên các đối tượng có thể lặp lại. Bạn có thể truy xuất độ dài của tập hợp này bằng hàm tích hợp sẵn len() và thứ tự lặp lại là thứ tự mà các phần tử được thêm vào tập hợp lần đầu tiên:

s = set(["z", "y", "z", "y"])
len(s)       # prints 2
s.add("x")
len(s)       # prints 3
for e in s:
    print e  # prints "z", "y", "x"

Một tập hợp được dùng trong ngữ cảnh Boolean là true nếu và chỉ nếu tập hợp đó không trống.

s = set()
"non-empty" if s else "empty"  # "empty"
t = set(["x", "y"])
"non-empty" if t else "empty"  # "non-empty"

Bạn có thể so sánh các tập hợp để biết chúng có bằng nhau hay không bằng cách sử dụng ==!=. Một tập hợp s bằng với t khi và chỉ khi t là một tập hợp chứa các phần tử giống nhau; thứ tự lặp lại không quan trọng. Cụ thể, một tập hợp không bằng danh sách các phần tử của tập hợp đó. Các tập hợp không được sắp xếp theo thứ tự so với các tập hợp khác và việc cố gắng so sánh hai tập hợp bằng cách sử dụng <, <=, >, >= hoặc sắp xếp một chuỗi tập hợp sẽ không thành công.

set() == set()              # True
set() != []                 # True
set([1, 2]) == set([2, 1])  # True
set([1, 2]) != [1, 2]       # True

Thao tác | trên hai tập hợp sẽ trả về hợp của hai tập hợp: một tập hợp chứa các phần tử có trong một hoặc cả hai tập hợp ban đầu.

set([1, 2]) | set([3, 2])  # set([1, 2, 3])

Thao tác & trên hai tập hợp sẽ trả về giao điểm của hai tập hợp: một tập hợp chỉ chứa các phần tử có trong cả hai tập hợp ban đầu.

set([1, 2]) & set([2, 3])  # set([2])
set([1, 2]) & set([3, 4])  # set()

Thao tác - trên hai tập hợp sẽ trả về hiệu số của hai tập hợp: một tập hợp chứa các phần tử có trong tập hợp bên trái nhưng không có trong tập hợp bên phải.

set([1, 2]) - set([2, 3])  # set([1])
set([1, 2]) - set([3, 4])  # set([1, 2])

Thao tác ^ trên hai tập hợp sẽ trả về hiệu đối xứng của hai tập hợp: một tập hợp chứa các phần tử chỉ có trong một trong hai tập hợp ban đầu, nhưng không có trong cả hai.

set([1, 2]) ^ set([2, 3])  # set([1, 3])
set([1, 2]) ^ set([3, 4])  # set([1, 2, 3, 4])

Trong mỗi thao tác trên, các phần tử của tập hợp kết quả vẫn giữ nguyên thứ tự từ hai tập hợp toán hạng, với tất cả các phần tử được lấy từ phía bên trái được sắp xếp trước mọi phần tử chỉ có ở phía bên phải.

Các phép gán tăng cường tương ứng (|=, &=, -=^=) sẽ sửa đổi tập hợp bên trái tại chỗ.

s = set([1, 2])
s |= set([2, 3, 4])     # s now equals set([1, 2, 3, 4])
s &= set([0, 1, 2, 3])  # s now equals set([1, 2, 3])
s -= set([0, 1])        # s now equals set([2, 3])
s ^= set([3, 4])        # s now equals set([2, 4])

Giống như mọi giá trị có thể thay đổi trong Starlark, một tập hợp có thể được cố định và sau khi được cố định, mọi thao tác tiếp theo cố gắng cập nhật tập hợp đó sẽ không thành công.

Hội viên

thêm

None set.add(element)

Thêm một phần tử vào tập hợp.

Bạn có thể add một giá trị đã có trong tập hợp; thao tác này sẽ không làm thay đổi tập hợp.

Nếu bạn cần thêm nhiều phần tử vào một tập hợp, hãy xem update hoặc thao tác gán tăng cường |=.

Thông số

Thông số Mô tả
element required
Phần tử cần thêm.

xóa

None set.clear()

Xoá tất cả các phần tử của tập hợp.

hiệu

set set.difference(*others)

Trả về một tập hợp có thể thay đổi mới chứa sự khác biệt giữa tập hợp này với các tập hợp khác.

Nếu st là các tập hợp, thì s.difference(t) tương đương với s - t; tuy nhiên, lưu ý rằng thao tác - yêu cầu cả hai bên phải là các tập hợp, trong khi phương thức difference cũng chấp nhận các chuỗi và từ điển.

Bạn có thể gọi difference mà không cần đối số; thao tác này sẽ trả về một bản sao của tập hợp.

Ví dụ:

set([1, 2, 3]).difference([2])             # set([1, 3])
set([1, 2, 3]).difference([0, 1], [3, 4])  # set([2])

Thông số

Thông số Mô tả
others required
Tập hợp, chuỗi gồm các phần tử có thể băm hoặc từ điển.

difference_update

None set.difference_update(*others)

Xoá mọi phần tử có trong bất kỳ phần tử nào khác khỏi tập hợp này.

Nếu st là các tập hợp, thì s.difference_update(t) tương đương với s -= t; tuy nhiên, lưu ý rằng phép gán tăng cường -= yêu cầu cả hai phía phải là các tập hợp, trong khi phương thức difference_update cũng chấp nhận các chuỗi và từ điển.

Bạn có thể gọi difference_update mà không có đối số nào; thao tác này sẽ giữ nguyên tập hợp.

Ví dụ:

s = set([1, 2, 3, 4])
s.difference_update([2])             # None; s is set([1, 3, 4])
s.difference_update([0, 1], [4, 5])  # None; s is set([3])

Thông số

Thông số Mô tả
others required
Tập hợp, chuỗi gồm các phần tử có thể băm hoặc từ điển.

hủy

None set.discard(element)

Xoá một phần tử khỏi tập hợp nếu phần tử đó có trong tập hợp.

Bạn được phép discard một giá trị không có trong tập hợp; thao tác này sẽ không làm thay đổi tập hợp. Nếu bạn muốn thất bại khi cố gắng xoá một phần tử không có, hãy dùng remove. Nếu bạn cần xoá nhiều phần tử khỏi một tập hợp, hãy xem difference_update hoặc thao tác gán tăng cường -=.

Ví dụ:

s = set(["x", "y"])
s.discard("y")  # None; s == set(["x"])
s.discard("y")  # None; s == set(["x"])

Thông số

Thông số Mô tả
element bắt buộc
Phần tử cần loại bỏ. Phải có thể băm.

giao điểm

set set.intersection(*others)

Trả về một tập hợp có thể thay đổi mới chứa giao điểm của tập hợp này với các tập hợp khác.

Nếu st là các tập hợp, thì s.intersection(t) tương đương với s & t; tuy nhiên, lưu ý rằng thao tác & yêu cầu cả hai bên phải là các tập hợp, trong khi phương thức intersection cũng chấp nhận các chuỗi và từ điển.

Bạn có thể gọi intersection mà không cần đối số; thao tác này sẽ trả về một bản sao của tập hợp.

Ví dụ:

set([1, 2]).intersection([2, 3])             # set([2])
set([1, 2, 3]).intersection([0, 1], [1, 2])  # set([1])

Thông số

Thông số Mô tả
others required
Tập hợp, chuỗi gồm các phần tử có thể băm hoặc từ điển.

intersection_update

None set.intersection_update(*others)

Xoá mọi phần tử không có trong tất cả các phần tử khác khỏi tập hợp này.

Nếu st là các tập hợp, thì s.intersection_update(t) tương đương với s &= t; tuy nhiên, lưu ý rằng phép gán tăng cường &= yêu cầu cả hai phía phải là các tập hợp, trong khi phương thức intersection_update cũng chấp nhận các chuỗi và từ điển.

Bạn có thể gọi intersection_update mà không có đối số nào; thao tác này sẽ giữ nguyên tập hợp.

Ví dụ:

s = set([1, 2, 3, 4])
s.intersection_update([0, 1, 2])       # None; s is set([1, 2])
s.intersection_update([0, 1], [1, 2])  # None; s is set([1])

Thông số

Thông số Mô tả
others required
Tập hợp, chuỗi gồm các phần tử có thể băm hoặc từ điển.

isdisjoint

bool set.isdisjoint(other)

Trả về true nếu tập hợp này không có phần tử nào giống với một tập hợp khác.

Ví dụ:

set([1, 2]).isdisjoint([3, 4])  # True
set().isdisjoint(set())         # True
set([1, 2]).isdisjoint([2, 3])  # False

Thông số

Thông số Mô tả
other required
Một tập hợp, một chuỗi các phần tử có thể băm hoặc một từ điển.

issubset

bool set.issubset(other)

Trả về true nếu tập hợp này là một tập hợp con của một tập hợp khác.

Xin lưu ý rằng một tập hợp luôn được coi là một tập hợp con của chính nó.

Ví dụ:

set([1, 2]).issubset([1, 2, 3])  # True
set([1, 2]).issubset([1, 2])     # True
set([1, 2]).issubset([2, 3])     # False

Thông số

Thông số Mô tả
other required
Một tập hợp, một chuỗi các phần tử có thể băm hoặc một từ điển.

issuperset

bool set.issuperset(other)

Trả về true nếu tập hợp này là một siêu tập hợp của một tập hợp khác.

Xin lưu ý rằng một tập hợp luôn được coi là một siêu tập hợp của chính nó.

Ví dụ:

set([1, 2, 3]).issuperset([1, 2])     # True
set([1, 2, 3]).issuperset([1, 2, 3])  # True
set([1, 2, 3]).issuperset([2, 3, 4])  # False

Thông số

Thông số Mô tả
other required
Một tập hợp, một chuỗi các phần tử có thể băm hoặc một từ điển.

nhạc pop

unknown set.pop()

Xoá và trả về phần tử đầu tiên của tập hợp (theo thứ tự lặp lại, tức là thứ tự mà các phần tử được thêm vào tập hợp lần đầu).

Thất bại nếu tập hợp trống.

Ví dụ:

s = set([3, 1, 2])
s.pop()  # 3; s == set([1, 2])
s.pop()  # 1; s == set([2])
s.pop()  # 2; s == set()
s.pop()  # error: empty set

xoá

None set.remove(element)

Xoá một phần tử (phải có trong tập hợp) khỏi tập hợp.

remove sẽ thất bại nếu phần tử không có trong tập hợp. Nếu bạn không muốn thất bại khi cố gắng xoá một phần tử không có mặt, hãy sử dụng discard. Nếu bạn cần xoá nhiều phần tử khỏi một tập hợp, hãy xem difference_update hoặc thao tác gán tăng cường -=.

Thông số

Thông số Mô tả
element required
Phần tử cần xoá. Phải là một phần tử của tập hợp (và có thể băm).

symmetric_difference

set set.symmetric_difference(other)

Trả về một tập hợp có thể thay đổi mới chứa hiệu đối xứng của tập hợp này với một tập hợp, chuỗi hoặc từ điển khác.

Nếu st là các tập hợp, thì s.symmetric_difference(t) tương đương với s ^ t; tuy nhiên, lưu ý rằng thao tác ^ yêu cầu cả hai bên phải là các tập hợp, trong khi phương thức symmetric_difference cũng chấp nhận một chuỗi hoặc một dict.

Ví dụ:

set([1, 2]).symmetric_difference([2, 3])  # set([1, 3])

Thông số

Thông số Mô tả
other required
Một tập hợp, một chuỗi các phần tử có thể băm hoặc một từ điển.

symmetric_difference_update

None set.symmetric_difference_update(other)

Trả về một tập hợp có thể thay đổi mới chứa hiệu đối xứng của tập hợp này với một tập hợp, chuỗi hoặc từ điển khác.

Nếu st là các tập hợp, thì s.symmetric_difference_update(t) tương đương với phép gán tăng cường `s ^= t; however, note that the ^=` yêu cầu cả hai phía phải là các tập hợp, trong khi phương thức symmetric_difference_update cũng chấp nhận một chuỗi hoặc một từ điển.

Ví dụ:

s = set([1, 2])
s.symmetric_difference_update([2, 3])  # None; s == set([1, 3])

Thông số

Thông số Mô tả
other required
Một tập hợp, một chuỗi các phần tử có thể băm hoặc một từ điển.

union

set set.union(*others)

Trả về một tập hợp có thể thay đổi mới chứa hợp của tập hợp này với các tập hợp khác.

Nếu st là các tập hợp, thì s.union(t) tương đương với s | t; tuy nhiên, lưu ý rằng thao tác | yêu cầu cả hai bên phải là các tập hợp, trong khi phương thức union cũng chấp nhận các chuỗi và từ điển.

Bạn có thể gọi union mà không cần đối số; thao tác này sẽ trả về một bản sao của tập hợp.

Ví dụ:

set([1, 2]).union([2, 3])                    # set([1, 2, 3])
set([1, 2]).union([2, 3], {3: "a", 4: "b"})  # set([1, 2, 3, 4])

Thông số

Thông số Mô tả
others required
Tập hợp, chuỗi gồm các phần tử có thể băm hoặc từ điển.

cập nhật

None set.update(*others)

Thêm các phần tử tìm thấy trong các phần tử khác vào tập hợp này.

Ví dụ:

s = set()
s.update([1, 2])          # None; s is set([1, 2])
s.update([2, 3], [3, 4])  # None; s is set([1, 2, 3, 4])

Nếu st là các tập hợp, thì s.update(t) tương đương với s |= t; tuy nhiên, xin lưu ý rằng phép gán tăng cường |= yêu cầu cả hai phía phải là các tập hợp, trong khi phương thức update cũng chấp nhận các chuỗi và từ điển.

Bạn có thể gọi update mà không có đối số nào; thao tác này sẽ giữ nguyên tập hợp.

Thông số

Thông số Mô tả
others required
Tập hợp, chuỗi gồm các phần tử có thể băm hoặc từ điển.