ผนวกค่ากับชุดใน Python


คำตอบ:


405
keep.update(yoursequenceofvalues)

เช่นkeep.update(xrange(11))สำหรับตัวอย่างเฉพาะของคุณ หรือถ้าคุณต้องสร้างค่าในลูปด้วยเหตุผลอื่น

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

แต่แน่นอนว่าการทำมันเป็นกลุ่มด้วยการ.updateโทรเพียงครั้งเดียวนั้นเร็วกว่าและสะดวกกว่าถ้าทำได้


78
.addเพิ่มรายการเดียว.updateเพิ่มหลายรายการ ถูกต้องไหม
ThorSummoner

16
@ThorSummoner ใช่.addคาดว่าเป็นชนิด hashable เดียวในขณะที่.updateคาดว่าวัตถุ iterable
บอน

4
หากคุณเพิ่มสตริงที่มีการปรับปรุงมันจะเพิ่มหนึ่งรายการต่อตัวละครในสตริงของคุณเพราะมันเป็นซ้ำ
hgolov

2
มันเป็นเรื่องสำคัญที่จะต้องทราบว่าควรจะเพิ่มสายอักขระในฐานะที่เป็นวัตถุ "ทั้งหมด" ด้วย.addไม่ใช่.updateเมื่อเร็ว ๆ นี้ฉันต้องเผชิญกับข้อผิดพลาดที่ไม่น่าเชื่อในรายละเอียดเล็ก ๆ นี้
lalilulelost

277

กำหนดชุด

a = set()

ใช้เพิ่มเพื่อผนวกค่าเดียว

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

ใช้การอัปเดตเพื่อเพิ่มองค์ประกอบจากสิ่งอันดับชุดรายการหรือชุดตรึง

a.update([3,4])

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

หากคุณต้องการเพิ่ม tuple หรือตั้งค่าการแช่แข็งตัวเองใช้เพิ่ม

a.add((5, 6))

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

หมายเหตุ: เนื่องจากองค์ประกอบชุดต้อง hashable และรายการนั้นถือว่าไม่แน่นอนคุณจึงไม่สามารถเพิ่มรายการลงในชุดได้ คุณไม่สามารถเพิ่มชุดอื่น ๆ ลงในชุดได้ อย่างไรก็ตามคุณสามารถเพิ่มองค์ประกอบจากรายการและชุดตามที่แสดงด้วยวิธี ".update"


105

คุณยังสามารถใช้|โอเปอเรเตอร์เพื่อต่อสองชุด ( รวมเข้าด้วยกันในทฤษฎีเซต):

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

หรือแบบสั้นโดยใช้|=:

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

หมายเหตุ:ในรุ่นก่อนที่จะมีงูหลาม 2.7 ใช้แทนset([...]){...}


1
หากคุณมีรายการชุดmy_setsคุณสามารถทำได้big_set = my_sets[0].union(*my_sets[1:])เพื่อรวมมันเข้าด้วยกัน
zelusp


10

คำถามนี้เป็นคนแรกที่แสดงบน Google เมื่อมองขึ้น "งูใหญ่วิธีการเพิ่มองค์ประกอบชุด" ดังนั้นจึงเป็นที่น่าสังเกตอย่างชัดเจนว่าถ้าคุณต้องการเพิ่มสตริงทั้งชุดก็ควรจะเพิ่มเข้ามาด้วย.add(), .update()ไม่

สมมติว่าคุณมีสตริงfoo_strที่มีเนื้อหาเป็น'this is a sentence'และคุณมีบางชุดเท่ากับbar_setset()

ถ้าคุณทำ เนื้อหาของชุดของคุณจะbar_set.update(foo_str){'t', 'a', ' ', 'e', 's', 'n', 'h', 'c', 'i'}

ถ้าคุณทำเนื้อหาของชุดของคุณจะbar_set.add(foo_str){'this is a sentence'}


3

วิธีที่ฉันชอบทำคือการแปลงทั้งชุดดั้งเดิมและค่าที่ฉันต้องการเพิ่มลงในรายการเพิ่มพวกเขาแล้วแปลงกลับเป็นชุดเช่นนี้

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'}

วิธีนี้ฉันยังสามารถเพิ่มหลาย ๆ ชุดได้อย่างง่ายดายโดยใช้ตรรกะเดียวกันซึ่งทำให้ฉันได้TypeError: unhashable type: 'set'ถ้าฉันลองทำด้วย.update()วิธีการ



0

สำหรับฉันใน Python 3 มันใช้งานได้ง่ายด้วยวิธีนี้:

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

ฉันไม่รู้ว่ามันถูกต้องหรือไม่ ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.