Tuple में वैरिएबल जोड़ें


282

मैं अजगर सीख रहा हूं और डेटाबेस कनेक्शन बना रहा हूं। डीबी में जोड़ने की कोशिश करते हुए, मैं जानकारी से बाहर ट्यूपल्स बनाने के बारे में सोच रहा हूं और फिर उन्हें डीबी में जोड़ दूंगा।

मैं क्या कर रहा हूं : मैं उपयोगकर्ता से जानकारी ले रहा हूं और इसे चर में संग्रहीत कर रहा हूं। क्या मैं इन चरों को टपल में जोड़ सकता हूँ? क्या आप कृपया सिंटैक्स के साथ मेरी मदद कर सकते हैं?

अगर ऐसा करने का कोई कारगर तरीका है, तो कृपया साझा करें ...

संपादित करें मुझे इस सवाल को थोड़ा संपादित करें ... मुझे केवल डीबी में जानकारी दर्ज करने के लिए टपल की आवश्यकता है। डीबी में जानकारी जुड़ने के बाद, क्या मुझे टपल को हटाना चाहिए? मेरा मतलब है कि मुझे अब टपल की आवश्यकता नहीं है।

जवाबों:


371

टुपल्स अपरिवर्तनीय हैं; आप वे परिवर्तन नहीं कर सकते हैं जो निर्माण के बाद वे होते हैं। हालाँकि, आप नए टुपल्स बनाने के लिए उन्हें संक्षिप्त या स्लाइस कर सकते हैं:

a = (1, 2, 3)
b = a + (4, 5, 6)  # (1, 2, 3, 4, 5, 6)
c = b[1:]  # (2, 3, 4, 5, 6)

और, निश्चित रूप से, उन्हें मौजूदा मूल्यों से बनाएँ:

name = "Joe"
age = 40
location = "New York"
joe = (name, age, location)

मैं केवल उपयोगकर्ता इनपुट के बाद DB में जोड़ने के लिए इन tuples की जरूरत है। तो क्या मुझे db में अपडेशन पूरा होने के बाद इन ट्यूपल्स को नष्ट करना चाहिए?
अमित

5
Db को अपडेट करने के बाद आपको टुपल्स को नष्ट करने की आवश्यकता नहीं है। यदि वे दायरे से बाहर जाते हैं तो उन्हें कचरा एकत्र किया जाना चाहिए।
जस्टिन स्टैंडर्ड


बस जोड़ने के लिए a = (), और b= a + (5), बी = 5 की ओर जाता है, इसलिए, की b= a + (5,)ओर जाता है b = (5,); एक tuple।
यशगर्ग १२३२

222

आप कुछ के साथ एक रिक्त टपल के साथ शुरू कर सकते हैं t = ()। आप के साथ जोड़ सकते हैं +, लेकिन आपको एक और tuple जोड़ना होगा। आप एक ही तत्व जोड़ने के लिए चाहते हैं, यह एक सिंगलटन बनाने: t = t + (element,)। आप उस अनुगामी अल्पविराम के साथ या उसके बिना कई तत्वों का टपल जोड़ सकते हैं।

>>> t = ()
>>> t = t + (1,)
>>> t
(1,)
>>> t = t + (2,)
>>> t
(1, 2)
>>> t = t + (3, 4, 5)
>>> t
(1, 2, 3, 4, 5)
>>> t = t + (6, 7, 8,)
>>> t
(1, 2, 3, 4, 5, 6, 7, 8)

20
इस उदाहरण के मामले में, कोई भी ऐसा कर सकता है: t = ()तबt += (1,)
डगलस डेनहर्टॉग

2
अनुगामी अल्पविराम को शामिल करने से क्या लाभ है?
Splic

13
कोष्ठक में तत्व के बीच भ्रम से बचने के लिए एकल के लिए आवश्यक अल्पविराम सीमा। सादे कोष्ठक का उपयोग ऑपरेशन के क्रम में किया जाता है, इसलिए (7) सिर्फ 7. लेकिन (7), एक-तत्व टपल है जहां तत्व 7. समान है, 3 * (7 + 8) = 45, लेकिन 3 * ( 7 + 8,) = (15, 15, 15) - क्या इसका कोई मतलब है?
डेनियल

2
बहु-तत्व टुपल्स के लिए, अनुगामी अल्पविराम 100% वैकल्पिक है। इस तरह के संकेतों को शामिल करना "यह एक ट्यूपल है, मुझे पता है कि यह एक ट्यूपल है, मुझे पता है कि ट्यूपल्स कैसे काम करते हैं, और मुझे पता है कि मैं ऐसा कर सकता हूं।" लेकिन कोई भी अल्पविराम अधिक प्राकृतिक नहीं लग सकता है। Idk। आप पर निर्भर करता है।
डैनियल

मुझे लगता है कि यह ध्यान रखना महत्वपूर्ण है कि ट्यूपल्स अपरिवर्तनीय हैं - उन्हें वास्तव में संशोधित नहीं किया जा सकता है। यह समाधान जो करता है वह दो मौजूदा टुपल्स के आधार पर एक नया टपल बनाता है
That1Guy

44

अभी तक उल्लेखित एक और युक्ति का उपयोग सूची में शामिल करने के लिए नहीं किया गया है, और फिर सूची को अंत में एक ट्यूपल में परिवर्तित करना है:

mylist = []
for x in range(5):
    mylist.append(x)
mytuple = tuple(mylist)
print mytuple

रिटर्न

(0, 1, 2, 3, 4)

मैं कभी-कभी इसका उपयोग तब करता हूं जब मुझे एक फ़ंक्शन तर्क के रूप में एक टपल को पास करना होता है, जो अक्सर सुन्न कार्यों के लिए आवश्यक होता है।


3
यह जानना उपयोगी है कि इसके विपरीत, यानी list(someTuple)काम भी करता है। दो वस्तु प्रकार स्पष्ट रूप से विनिमेय हैं
कावेरीम

वास्तव में विनिमेय नहीं है, मुझे लगता है कि टपल से सूची में रूपांतरण सूची में सभी तत्वों को कॉपी करेगा, इसलिए निश्चित रूप से इससे बचने के लिए जगह हैं
gbtimmon

41

पायथन 3 में, आप *मूल तत्व से नए तत्व के साथ एक नया टपल बनाने के लिए उपयोग कर सकते हैं ।

>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')

2
यह मेरे लिए अब तक का सबसे अजगर है।
बोम्सिक किम

6
की तुलना में यह 10 गुना धीमा है tuple1 + ("baz",)
मतीन उलहाक

9

"एक बार जब जानकारी डीबी में जुड़ जाती है, तो क्या मुझे टपल को हटाना चाहिए? मेरा मतलब है कि मुझे अब टपल की आवश्यकता नहीं है।"

नहीं।

आम तौर पर, कुछ भी हटाने का कोई कारण नहीं है। हटाने के लिए कुछ विशेष मामले हैं, लेकिन वे बहुत, बहुत दुर्लभ हैं।

बस एक संकीर्ण दायरे (यानी, एक फंक्शन डेफिनिशन या एक क्लास में एक विधि फ़ंक्शन) को परिभाषित करें और गुंजाइश के अंत में वस्तुओं को इकट्ठा किया जाएगा।

कुछ भी हटाने के बारे में चिंता मत करो।

[ध्यान दें। मैंने एक आदमी के साथ काम किया, जो वस्तुओं को हटाने की कोशिश करने के अलावा - हमेशा उन्हें खाली करने के लिए "रीसेट" तरीके लिख रहा था। जैसे वह उन्हें बचाने और उनका पुन: उपयोग करने जा रहा था। इसके अलावा एक मूर्खतापूर्ण दंभ। उन वस्तुओं को अनदेखा करें जिनका आप अब उपयोग नहीं कर रहे हैं। यदि आप कोड के छोटे-पर्याप्त ब्लॉक में अपने कार्यों को परिभाषित करते हैं, तो आपके पास सोचने के लिए अधिक कुछ नहीं है।]


7

यह निम्नलिखित के रूप में आसान है:

info_1 = "one piece of info"
info_2 = "another piece"
vars = (info_1, info_2)
# 'vars' is now a tuple with the values ("info_1", "info_2")

हालाँकि, पाइथन में ट्यूप्स अपरिवर्तनीय हैं , इसलिए जब आप इसे बनाते हैं तो आप वैरिएबल को एक ट्यूपल में नहीं जोड़ सकते।


3

जैसा कि अन्य उत्तरों ने उल्लेख किया है, आप एक मौजूदा टपल को नहीं बदल सकते हैं, लेकिन आप हमेशा एक नया टपल बना सकते हैं (जो मौजूदा ट्यूपल्स और / या अन्य स्रोतों से कुछ या सभी आइटम ले सकते हैं)।

उदाहरण के लिए, यदि ब्याज की सभी वस्तुएँ अदिश चर में हैं और आप उन चरों के नाम जानते हैं:

def maketuple(variables, names):
  return tuple(variables[n] for n in names)

इस उदाहरण के रूप में इस्तेमाल किया जा सकता है:

def example():
  x = 23
  y = 45
  z = 67
  return maketuple(vars(), 'x y z'.split())

बेशक यह एक मामला अधिक सरल रूप से व्यक्त किया जाएगा (x, y, z)(या यहां तक ​​कि नामों को पूरी तरह से आगे बढ़ाते हुए (23, 45, 67)), लेकिन maketupleदृष्टिकोण कुछ अधिक जटिल मामलों में उपयोगी हो सकता है (उदाहरण के लिए, जहां नाम का उपयोग भी गतिशील रूप से निर्धारित किया जाता है और सूची के दौरान जोड़ा जाता है) गणना)।


2

मुझे पूरा यकीन है कि अजगर में इसके लिए वाक्य रचना है:

user_input1 = raw_input("Enter Name: ")
user_input2 = raw_input("Enter Value: ")
info = (user_input1, user_input2)

एक बार सेट हो जाने के बाद, टुपल्स को बदला नहीं जा सकता।

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