पायथन में एक सेट के लिए मान जोड़ें


372

मेरे पास इस तरह का एक सेट है:

keep = set(generic_drugs_mapping[drug] for drug in drug_input)

मैं [0,1,2,3,4,5,6,7,8,9,10]इस सेट में मान कैसे जोड़ूं ?

जवाबों:


405
keep.update(yoursequenceofvalues)

उदाहरण के लिए, keep.update(xrange(11))अपने विशिष्ट उदाहरण के लिए। या, आप अगर है किसी अन्य कारण से एक पाश में मूल्यों का उत्पादन करने,

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

लेकिन, निश्चित रूप से, यह एक .updateकॉल के साथ बल्क में करना तेज और आसान है, जब अन्यथा संभव हो।


78
.addएक आइटम .updateजोड़ता है , कई आइटम जोड़ता है। क्या वो सही है?
थोरसुमोनर

16
@ थोरसुमोनर हाँ, .addएक एकल हैश प्रकार के होने की .updateअपेक्षा करता है , जबकि एक चलने योग्य वस्तु की उम्मीद करता है
बोनी

4
यदि आप अपडेट के साथ एक स्ट्रिंग जोड़ते हैं, तो यह आपके स्ट्रिंग में एक चरित्र प्रति आइटम जोड़ देगा क्योंकि यह एक चलने योग्य है!
hgolov

2
यह नोट करना वास्तव में महत्वपूर्ण है कि तार, "पूरे" ऑब्जेक्ट के रूप में, के साथ जोड़ा जाना चाहिए .add, नहीं .update, मुझे हाल ही में इस छोटे से विवरण के कारण काफी डरपोक बग का सामना करना पड़ा।
लालिल्यूलोस्ट

276

सेट को परिभाषित करें

a = set()

एकल मूल्यों को जोड़ने के लिए उपयोग करें

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

ट्यूल, सेट, सूची या फ्रोजन-सेट से तत्वों को जोड़ने के लिए अपडेट का उपयोग करें

a.update([3,4])

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

यदि आप स्वयं एक टपल या फ्रोजन-सेट जोड़ना चाहते हैं, तो ऐड का उपयोग करें

a.add((5, 6))

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

नोट: चूँकि सेट तत्व उपलब्ध नहीं होने चाहिए, और सूचियों को परिवर्तनशील माना जाता है, आप सूची को सेट में नहीं जोड़ सकते। आप सेट में अन्य सेट भी नहीं जोड़ सकते। हालाँकि, आप सूचियों और सेटों में से तत्वों को जोड़ सकते हैं जैसा कि ".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_setबराबर है set()

यदि आप करते हैं 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

मेरे लिए, पायथन 3 में, यह बस इस तरह से काम कर रहा है:

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

मुझे नहीं पता कि क्या यह सही हो सकता है ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.