केवल एक तत्व के साथ एक टपल कैसे बनाएं


107

नीचे दिए गए उदाहरण में, मैं सभी तत्वों को ट्यूपल्स होने की उम्मीद करूंगा, क्यों एक ट्यूपल को एक स्ट्रिंग में परिवर्तित किया जाता है जब इसमें केवल एक स्ट्रिंग होती है?

>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>> 
>>> for elem in a:
...     print type(elem)
... 
<type 'str'>
<type 'str'>
<type 'tuple'>

1
('a')सिर्फ मूल्यांकन करता है'a'
— oldrinb

1
वाह - 3 मिनट में 3 सही उत्तर :) हालांकि, का रहस्य नोट करें ,:a = 1, 2, 3; print a

26
ब्रैकेट टपल नहीं बनाते हैं, कॉमा करते हैं।
— cdarke

17
@ LCDarke, खाली टपल को छोड़कर (), जिसमें केवल कोष्ठक की एक जोड़ी होती है।
— फ्रैडरिक हमीदी

2
सच है, या बल्कि, False- बस के बारे में सभी एक खाली टपल के लिए अच्छा है (यदि आप देखते हैं कि मेरा क्या मतलब है)।
— cdarke

जवाबों:


140

क्योंकि वे पहले दो तत्व ट्यूपल नहीं हैं; वे सिर्फ तार हैं। कोष्ठक स्वचालित रूप से उन्हें tuples नहीं बनाते हैं। अजगर को इंगित करने के लिए आपको स्ट्रिंग के बाद एक अल्पविराम जोड़ना होगा कि यह एक ट्यूपल होना चाहिए।

>>> type( ('a') )
<type 'str'>

>>> type( ('a',) )
<type 'tuple'>

अपना उदाहरण कोड ठीक करने के लिए, यहाँ अल्पविराम जोड़ें:

>>> a = [('a',), ('b',), ('c', 'd')]

             ^       ^

से अजगर डॉक्स :

एक विशेष समस्या 0 या 1 आइटम वाले टुपल्स का निर्माण है: इनको समायोजित करने के लिए सिंटैक्स में कुछ अतिरिक्त quirks हैं। खाली टुपल्स का निर्माण कोष्ठक की एक खाली जोड़ी द्वारा किया जाता है; एक आइटम के साथ एक टपल का निर्माण अल्पविराम के साथ एक मूल्य का पालन करके किया जाता है (यह कोष्ठकों में एक मान को संलग्न करने के लिए पर्याप्त नहीं है)। बदसूरत, लेकिन प्रभावी।

यदि आप वास्तव में अनुगामी अल्पविराम वाक्य रचना से घृणा करते हैं, listतो tuple()फ़ंक्शन को पास करने के लिए वर्कअराउंड है :

x = tuple(['a'])

6
हालांकि यह बहुत सुंदर नहीं है और भ्रामक लगता है। क्या कोई और तरीका है?
— राबर्ट मूर

3
यह काम नहीं लगता है। उदाहरण के लिए: टपल ("एबीसी") (अतिरिक्त कॉमा के साथ या बिना) ('ए', 'बी', 'सी') देता है, जबकि ("एबीसी"), ('एबीसी') देता है। इसलिए टपल () यहां व्यवहार्य विकल्प नहीं लगता है।
— बेन किसान

3
@ फिर डॉक्स पर एक नजर है । tuple एक पुनरावृत्ति को स्वीकार करता है , जो एक स्ट्रिंग है (वर्णों पर पुनरावृत्त करता है)। यदि आप अनुगामी अल्पविराम का उपयोग नहीं करने पर जोर देते हैं, तो एक मध्यवर्ती सूची बनाएं tuple(['abc']):।
— जोनाथन रेनहार्ट

यकीन है, मैं सिर्फ इतना कह रहा हूं कि टपल फ़ंक्शन अल्पविराम की आवश्यकता को नकारता नहीं है।
— बेन किसान

1
@matanster इस संदर्भ में भाषा सिंटैक्स नहीं बदला है। AFAIK समस्या अजगर 2 और 3 के लिए समान है
— जोनाथन रेइनहार्ट

20

आपके पहले दो उदाहरण ट्यूपल्स नहीं हैं, वे तार हैं। एकल-आइटम टुपल्स के लिए एक अल्पविराम अल्पविराम की आवश्यकता होती है:

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]

11

('a') एक टपल नहीं है, लेकिन सिर्फ एक स्ट्रिंग है।

आपको pythonउन्हें लेने के लिए अंत में एक अतिरिक्त अल्पविराम जोड़ना होगा tuple: -

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
>>> 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.