ฉันมีชุดเช่นนี้:
keep = set(generic_drugs_mapping[drug] for drug in drug_input)
ฉันจะเพิ่มค่า[0,1,2,3,4,5,6,7,8,9,10]ลงในชุดนี้ได้อย่างไร
ฉันมีชุดเช่นนี้:
keep = set(generic_drugs_mapping[drug] for drug in drug_input)
ฉันจะเพิ่มค่า[0,1,2,3,4,5,6,7,8,9,10]ลงในชุดนี้ได้อย่างไร
คำตอบ:
keep.update(yoursequenceofvalues)
เช่นkeep.update(xrange(11))สำหรับตัวอย่างเฉพาะของคุณ หรือถ้าคุณต้องสร้างค่าในลูปด้วยเหตุผลอื่น
for ...whatever...:
onemorevalue = ...whatever...
keep.add(onemorevalue)
แต่แน่นอนว่าการทำมันเป็นกลุ่มด้วยการ.updateโทรเพียงครั้งเดียวนั้นเร็วกว่าและสะดวกกว่าถ้าทำได้
.addคาดว่าเป็นชนิด hashable เดียวในขณะที่.updateคาดว่าวัตถุ iterable
.addไม่ใช่.updateเมื่อเร็ว ๆ นี้ฉันต้องเผชิญกับข้อผิดพลาดที่ไม่น่าเชื่อในรายละเอียดเล็ก ๆ นี้
กำหนดชุด
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"
คุณยังสามารถใช้|โอเปอเรเตอร์เพื่อต่อสองชุด ( รวมเข้าด้วยกันในทฤษฎีเซต):
>>> 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([...]){...}
my_setsคุณสามารถทำได้big_set = my_sets[0].union(*my_sets[1:])เพื่อรวมมันเข้าด้วยกัน
ใช้updateแบบนี้:
keep.update(newvalues)
คำถามนี้เป็นคนแรกที่แสดงบน 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'}
วิธีที่ฉันชอบทำคือการแปลงทั้งชุดดั้งเดิมและค่าที่ฉันต้องการเพิ่มลงในรายการเพิ่มพวกเขาแล้วแปลงกลับเป็นชุดเช่นนี้
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()วิธีการ
keep.update((0,1,2,3,4,5,6,7,8,9,10))
หรือ
keep.update(np.arange(11))
สำหรับฉันใน Python 3 มันใช้งานได้ง่ายด้วยวิธีนี้:
keep = keep.union((0,1,2,3,4,5,6,7,8,9,10))
ฉันไม่รู้ว่ามันถูกต้องหรือไม่ ...
.addเพิ่มรายการเดียว.updateเพิ่มหลายรายการ ถูกต้องไหม