सूची को "ठीक से" कैसे प्रिंट करें?


95

इसलिए मेरे पास एक सूची है:

['x', 3, 'b']

और मैं चाहता हूं कि आउटपुट हो:

[x, 3, b]

मैं अजगर में यह कैसे कर सकता हूं?

यदि मैं करता हूं str(['x', 3, 'b']), तो मुझे उद्धरण के साथ एक मिलता है, लेकिन मुझे उद्धरण नहीं चाहिए।


क्यों सूची नहीं "ठीक से" छपा है, की व्याख्या करने के print(["Sam"])कॉल repr("Sam"), जो रिटर्न 'Sam'(उद्धरण के साथ), के विपरीत जब आप कॉल print("Sam")और अजगर कॉल str("Sam")जो रिटर्न Sam(उद्धरण के बिना)। देखें बीच का अंतर strऔरrepr या अजगर strऔर listरों अधिक जानकारी के लिए।
बेनामी

जवाबों:


188

पायथन 2 में:

mylist = ['x', 3, 'b']
print '[%s]' % ', '.join(map(str, mylist))

पायथन 3 में (जहां printएक बिलियन फ़ंक्शन है और अब कोई सिंटैक्स सुविधा नहीं है):

mylist = ['x', 3, 'b']
print('[%s]' % ', '.join(map(str, mylist)))

दोनों वापस:

[x, 3, b]

यह mylist केmap() प्रत्येक तत्व के लिए str को कॉल करने के लिए फंक्शन का उपयोग कर रहा है, इसके बाद एक स्ट्रिंग में शामिल होने वाले स्ट्रिंग्स की एक नई सूची बनाता हैstr.join() । फिर, %स्ट्रिंग स्वरूपण ऑपरेटर स्ट्रिंग को इसके स्थान पर प्रतिस्थापित करता %sहै "[%s]"


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

19
वह प्रत्येक तत्व mapको कॉल करने के लिए फ़ंक्शन का उपयोग कर रहा strहै mylist, स्ट्रिंग की एक नई सूची बनाता है जिसे वह फिर एक स्ट्रिंग में शामिल करता है str.join। फिर, वह उपयोग करता %स्ट्रिंग ऑपरेटर स्वरूपण के बजाय स्ट्रिंग स्थानापन्न करने %sमें "[%s]"
li.davidm

6
इसे करने का एक और तरीका है जो शायद थोड़ा अधिक आधुनिक है: "[{0}]".format(", ".join(str(i) for i in mylist))
जैक ओ'कॉनर

2
मैं पसंद करता हूं map(f, xs)(या imappython2.x पर) (f(x) for x in xs), जब fएक पूर्वनिर्धारित कॉल करने योग्य है; यह कम बाइटकोड को निष्पादित करता है, और आमतौर पर अधिक कॉम्पैक्ट होता है। निश्चित रूप से map(lambda x:..., xs) thats से भी बदतर(... for x in xs)
SingleNegationElimination

1
@ user1767754: वास्तव में? संपर्क?
सिंगलएनजेशन इलिमिनेशन

18

यह सरल कोड है, इसलिए यदि आप नए हैं तो आपको इसे आसानी से समझ लेना चाहिए।

    mylist = ["x", 3, "b"]
    for items in mylist:
        print(items)

यह उन सभी को बिना उद्धरण के प्रिंट करता है, जैसे आप चाहते थे।


15

केवल प्रिंट का उपयोग करना:

>>> l = ['x', 3, 'b']
>>> print(*l, sep='\n')
x
3
b
>>> print(*l, sep=', ')
x, 3, b

14

यदि आप पायथन 3 का उपयोग कर रहे हैं:

print('[',end='');print(*L, sep=', ', end='');print(']')

1
प्रिंट (* L) यहाँ क्या करता है?
संदीप


1
मैं इससे भ्रमित हूं। क्या लंबा डेटा टाइप किसी तरह सूची को फ़िल्टर कर रहा है?
14

एक और संक्षिप्त संस्करण होगाprint(end='['); print(*l, sep=', ', end=']\n')
बेनामी

9

उपयोग करने के बजाय map, मैं joinएक इट्रेटर को स्वीकार करने की क्षमता के साथ एक जनरेटर अभिव्यक्ति का उपयोग करने की सलाह दूंगा:

def get_nice_string(list_or_iterator):
    return "[" + ", ".join( str(x) for x in list_or_iterator) + "]"

यहाँ, joinस्ट्रिंग कक्षा का एक सदस्य कार्य है str। यह एक तर्क लेता है: स्ट्रिंग की एक सूची (या पुनरावृत्ति), फिर इस मामले में, द्वारा अवगत सभी तत्वों के साथ एक नया स्ट्रिंग लौटाता है ,


2
पायथन 2 के लिए एक अच्छा अनुकूलन, क्योंकि मानचित्र 2.x में एक सूची देता है। यह 3.x में एक जनरेटर देता है, इसलिए यह उतना मदद नहीं करता है।
टॉम जिक

7
मैं वापसी ", ".join( str(x) for x in list_or_iterator).join('[]')
करूंगा

@eyquem: चतुर, मैंने पहले की तरह उपयोग में शामिल नहीं देखा है। फिर भी, यह एक शुरुआत करने वाले के लिए थोड़ा अधिक अपारदर्शी है (क्योंकि आप संपत्ति का उपयोग कर रहे हैं कि एक स्ट्रिंग एक चरित्र वाले तार के चलने योग्य कंटेनर है)।
सेठ जॉनसन

6

आप एक स्ट्रिंग इसके उपयोग करने से सभी अवांछित पात्रों को हटा सकते हैं translate()विधि के साथ Noneके लिए tableतर्क एक स्ट्रिंग चरित्र (रों) युक्त आप अपने लिए निकालना चाहते हैं, जिसके बाद deletecharsतर्क।

lst = ['x', 3, 'b']

print str(lst).translate(None, "'")

# [x, 3, b]

यदि आप 2.6 से पहले पायथन के संस्करण का उपयोग कर रहे हैं, तो आपको इसके बजाय stringमॉड्यूल के translate()फ़ंक्शन का उपयोग करने की आवश्यकता होगी, क्योंकि तर्क के Noneरूप में पास करने की क्षमता tableपायथन 2.6 तक जोड़ी नहीं गई थी। इसका उपयोग इस तरह दिखता है:

import string

print string.translate(str(lst), None, "'")

string.translate()फ़ंक्शन का उपयोग करना 2.6+ में भी काम करेगा, इसलिए इसका उपयोग करना बेहतर हो सकता है।


2
काश: lst = ["it isn't", 3, 'b']==> ["it isnt", 3, b]और साथ मेंlst = ['it isn\'t', 3, 'b']
आंखों की रोशनी

1
@eyquem: हाँ, उन पात्रों को हटाने से बचना चाहिए जो वास्तव में आपके डेटा का हिस्सा हैं (इसके बजाय इसे सख्ती से परिसीमन करने के लिए इस्तेमाल किया जा रहा है) स्वाभाविक रूप से थोड़ा अधिक विस्तृत / अलग तर्क की आवश्यकता होगी यदि यह एक संभावना है।
मार्टिउ

3

यहाँ @ TokenMacGuy के वन-लाइनर में कुछ चरणों को दर्शाने वाला एक इंटरैक्टिव सत्र है। पहले वह mapसूची में प्रत्येक आइटम को स्ट्रिंग में बदलने के लिए फ़ंक्शन का उपयोग करता है (वास्तव में, वह एक नई सूची बना रहा है, पुरानी सूची में आइटम को परिवर्तित नहीं कर रहा है)। फिर वह joinउन ', 'दोनों के साथ तार जोड़ने के लिए स्ट्रिंग विधि का उपयोग कर रहा है। बाकी बस स्ट्रिंग स्वरूपण है, जो बहुत सीधा है। (संपादित करें: यह उदाहरण सीधा है; सामान्य रूप में स्ट्रिंग स्वरूपण कुछ जटिल हो सकता है।)

ध्यान दें कि joinकई सबस्ट्रिंग से एक स्ट्रिंग बनाने का एक सरल और कुशल तरीका है, इसे स्ट्रिंग्स में क्रमिक रूप से जोड़कर करने की तुलना में बहुत अधिक कुशल है, जिसमें दृश्यों के पीछे बहुत सारी नकल शामिल है।

>>> mylist = ['x', 3, 'b']
>>> m = map(str, mylist)
>>> m
['x', '3', 'b']
>>> j = ', '.join(m)
>>> j
'x, 3, b'

2

.formatस्ट्रिंग स्वरूपण के लिए उपयोग करना ,

mylist = ['x', 3, 'b']
print("[{0}]".format(', '.join(map(str, mylist))))

आउटपुट:

[x, 3, b]

स्पष्टीकरण:

  1. mapstringटाइप करने के लिए सूची के प्रत्येक तत्व को मैप करने के लिए उपयोग किया जाता है ।
  2. तत्वों ,को विभाजक के रूप में एक स्ट्रिंग में एक साथ जोड़ा जाता है ।
  3. हम का उपयोग करें [और ]प्रिंट बयान में सूची ब्रेसिज़ दिखाने के लिए।

संदर्भ: .formatस्ट्रिंग प्रारूपण PEP-3101 के लिए


महान! मैं .formatसबसे अधिक पायथोनिक तरीके का उपयोग कर पाता हूं । लेकिन, निश्चित रूप से, मैं असहमतियों को स्वीकार करता हूं। ;)
प्रिय।जयुस

0

मुझे @AniMenon ने एक और अधिक सामान्य समाधान लिखने के लिए प्रेरित किया।

mylist = ['x', 3, 'b']
print('[{}]'.format(', '.join(map('{}'.format, mylist))))

यह केवल formatविधि का उपयोग करता है । का कोई निशान नहीं है str, और यह तत्व प्रारूप के ठीक ट्यूनिंग के लिए अनुमति देता है। उदाहरण के लिए, यदि आपके पास सूची के तत्वों के रूप में फ्लोट संख्याएं हैं, तो आप इस मामले में एक रूपांतरण विनिर्देशक जोड़कर, उनके प्रारूप को समायोजित कर सकते हैं।:.2f

mylist = [1.8493849, -6.329323, 4000.21222111]
print("[{}]".format(', '.join(map('{:.2f}'.format, mylist))))

आउटपुट काफी सभ्य है:

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