Nối các giá trị vào một tập hợp trong Python


Câu trả lời:


405
keep.update(yoursequenceofvalues)

ví dụ, keep.update(xrange(11))cho ví dụ cụ thể của bạn. Hoặc, nếu bạn phải tạo ra các giá trị trong một vòng lặp vì một số lý do khác,

for ...whatever...:
  onemorevalue = ...whatever...
  keep.add(onemorevalue)

Nhưng, tất nhiên, thực hiện hàng loạt với một .updatecuộc gọi sẽ nhanh hơn và xử lý hơn, khi không khả thi.


78
.addthêm một mục duy nhất, .updatethêm một số mục. Đúng không?
ThorSummoner

16
@ThorSummoner Có, .addmong đợi một loại có thể băm duy nhất, trong khi .updatemong đợi một đối tượng có thể lặp lại
Bonnie

4
Nếu bạn thêm một chuỗi có cập nhật, nó sẽ thêm một mục cho mỗi ký tự trong chuỗi của bạn vì đó là một lần lặp!
hgolov

2
Điều thực sự quan trọng cần lưu ý là các chuỗi, như các đối tượng "toàn bộ", nên được thêm vào .add, không .update, gần đây tôi đã phải đối mặt với một lỗi khá lén lút về chi tiết nhỏ này.
lalilulelost

277

Xác định bộ

a = set()

Sử dụng thêm để chắp thêm các giá trị đơn

a.add(1)
a.add(2)

Sử dụng cập nhật để thêm các thành phần từ bộ dữ liệu, bộ, danh sách hoặc bộ đóng băng

a.update([3,4])

>> print(a)
{1, 2, 3, 4}

Nếu bạn muốn thêm một tuple hoặc Frozen-set, hãy sử dụng add

a.add((5, 6))

>> print(a)
{1, 2, 3, 4, (5, 6)}

Lưu ý: Vì các phần tử tập hợp phải có thể băm và danh sách được coi là có thể thay đổi, bạn không thể thêm danh sách vào tập hợp. Bạn cũng không thể thêm các bộ khác vào một bộ. Tuy nhiên, bạn có thể thêm các phần tử từ danh sách và bộ như thể hiện bằng phương pháp ".update".


105

Bạn cũng có thể sử dụng |toán tử để ghép hai bộ ( liên kết trong lý thuyết tập hợp):

>>> my_set = {1}
>>> my_set = my_set | {2}
>>> my_set
{1, 2}

Hoặc một hình thức ngắn hơn bằng cách sử dụng |=:

>>> my_set = {1}
>>> my_set |= {2}
>>> my_set
{1, 2}

Lưu ý: Trong các phiên bản trước Python 2.7, hãy sử dụng set([...])thay vì {...}.


1
Nếu bạn có một danh sách các bộ my_sets, thì bạn có thể làm big_set = my_sets[0].union(*my_sets[1:])để kết hợp tất cả chúng
zelusp 7/11/2016


10

Câu hỏi này là câu hỏi đầu tiên xuất hiện trên Google khi tìm kiếm "Python cách thêm các phần tử để thiết lập", vì vậy, đáng chú ý rằng, nếu bạn muốn thêm toàn bộ chuỗi vào một tập hợp, thì nên thêm nó vào .add(), không .update().

Giả sử bạn có một chuỗi foo_strcó nội dung 'this is a sentence'và bạn có một số bộ bar_setbằng set().

Nếu bạn làm như vậy bar_set.update(foo_str), nội dung của bộ của bạn sẽ được {'t', 'a', ' ', 'e', 's', 'n', 'h', 'c', 'i'}.

Nếu bạn làm như vậy bar_set.add(foo_str), nội dung của bộ của bạn sẽ được {'this is a sentence'}.


3

Cách tôi muốn làm là chuyển đổi cả bộ gốc và các giá trị tôi muốn thêm vào danh sách, thêm chúng và sau đó chuyển đổi chúng thành một bộ, như thế này:

setMenu = {"Eggs", "Bacon"}
print(setMenu)
> {'Bacon', 'Eggs'}
setMenu = set(list(setMenu) + list({"Spam"}))
print(setMenu)
> {'Bacon', 'Spam', 'Eggs'}
setAdditions = {"Lobster", "Sausage"}
setMenu = set(list(setMenu) + list(setAdditions))
print(setMenu)
> {'Lobster', 'Spam', 'Eggs', 'Sausage', 'Bacon'}

Bằng cách này, tôi cũng có thể dễ dàng thêm nhiều bộ bằng cách sử dụng cùng một logic, điều này giúp tôi có được TypeError: unhashable type: 'set'nếu tôi thử thực hiện với .update()phương thức.


2
keep.update((0,1,2,3,4,5,6,7,8,9,10))

Hoặc là

keep.update(np.arange(11))

0

Đối với tôi, trong Python 3, nó hoạt động đơn giản theo cách này:

keep = keep.union((0,1,2,3,4,5,6,7,8,9,10))

Tôi không biết liệu nó có đúng khô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.