2010-03-08 23 views
27

कॉमा सेपरेटेड वैल्यूज़अजगर, प्रिंट सीमांकित सूची

for element in list: 
    print element + ",", 

क्या इस तरह के मुद्रण के लिए पसंदीदा तरीका है कि एक अल्पविराम अगर element सूची में अंतिम तत्व है प्रकट नहीं होता है की एक सूची मुद्रण के लिए इस अजगर कोड पर विचार करें ।

पूर्व

a = [1, 2, 3] 
for element in a 
    print str(element) +",", 

output 
1,2,3, 
desired 
1,2,3 
+3

संभावित डुप्लिकेट आप कैसे होगा एक अल्पविराम से अलग एक सूची से स्ट्रिंग?] (http://stackoverflow.com/questions/44778/how-would-you-make-a-comma-separated-string-from-a-list) – manetsus

उत्तर

75
>>> ','.join(map(str,a)) 
'1,2,3' 
+1

+1 याद रखने के लिए कि आपको पहले 'str' में कनवर्ट करना होगा। अच्छे कोड के लिए –

+6

+1, -1 स्ट्र और ए के बीच एक जगह नहीं डालने के लिए। –

+5

रिक्त स्थान चूसने वालों के लिए हैं –

2

क्या join के लिए है यही कारण है कि।

','.join([str(elem) for elem in a]) 
+1

'TypeError: अनुक्रम आइटम 0: अपेक्षित स्ट्रिंग, int पाया।'यह अपने नमूना इनपुट के लिए काम नहीं करता है। – Ponkadoodle

+0

ठीक है, क्षमा करें। यह स्वचालित रूप से तारों को तारों में परिवर्तित नहीं करता है। एक निफ्टी सूची समझ के साथ फिक्स्ड। – MatrixFrog

+6

सूची समझ का उपयोग न करें। '[] 'S निकालें और यह जनरेटर बनाएगा, जो एक (संभावित रूप से बड़ी) अनावश्यक अस्थायी सूची बनाने के बिना भी काम करेगा। –

0
print ','.join(a) 
+0

'join' स्वचालित रूप से तारों को तारों में परिवर्तित नहीं करता है, इसलिए यह काम नहीं करेगा। –

+0

@musicfreak क्या यह आपको मूर्खतापूर्ण प्रतीत होता है कि यह स्वचालित रूप से str() नहीं है? आखिरकार, '.join() एक स्ट्रिंग विधि है। मुझे आश्चर्य है कि यह मुफ्त में क्यों नहीं करता है। – orokusaki

+1

@orokusaki: यह "निषेध से स्पष्ट स्पष्ट है" के खिलाफ चला जाता है। –

12

एक ','.join अन्य उत्तर में सुझाव के रूप में ठेठ पायथन समाधान है; सामान्य दृष्टिकोण है, जो विचित्र मैं जवाब अब तक में से किसी में नहीं दिख रहा है,

print ','.join(str(x) for x in a) 

एक जनरेटर अभिव्यक्ति या genexp रूप में जाना जाता है।

for i, x in enumerate(a): 
    if i: print ',' + str(x), 
    else: print str(x), 

इस:

आप एक पाश पसंद करते हैं (या अन्य प्रयोजनों के लिए एक की जरूरत है, यदि आप, बस प्रत्येक आइटम पर मुद्रण की तुलना में अधिक कर रहे हैं उदाहरण के लिए) है, वहाँ भी उत्कृष्ट विकल्प निश्चित रूप से कर रहे हैं एक पहली बार स्विच है (किसी भी पुनरावर्तनीय के लिए काम करता है, चाहे कोई सूची या अन्यथा) तो यह प्रत्येक आइटम पर पहले से पहले कॉमा रखता है। एक आखिरी समय स्विच थोड़ा कम खूबसूरत है और यह iterables जो एक len() (के लिए पूरी तरह से सामान्य नहीं हैं) के लिए ही काम करते हैं:

for i, x in enumerate(a): 
    if i == len(a) - 1: print str(x) 
    else: print str(x) + ',', 

इस उदाहरण भी जब लाइन समाप्त करने के लिए पिछले समय स्विच का लाभ लेता है यह बहुत आखिरी वस्तु प्रिंट कर रहा है।

enumerate अंतर्निर्मित फ़ंक्शन अक्सर उपयोगी होता है, और ध्यान में रखने योग्य है!

+0

अंकन अच्छा है, लेकिन ओपी के मामले में, एक साधारण जुड़ाव पर्याप्त है। – ghostdog74

+1

निश्चित रूप से, मैंने यही शुरुआत की है (उस समय genexp दे रहा है जब अन्य उत्तरों में नक्शे, listcomps, या कोई रूपांतरण-टू-स्ट्रिंग नहीं था) - क्या आपने इस उत्तर का पहला अनुच्छेद _seen_ किया है, perchance? -) पहली बार और आखिरी बार स्विच अधिक बहुमुखी हैं, और कोई अन्य जवाब भी उनका उल्लेख नहीं किया गया है, इसलिए मैंने उन्हें निश्चित रूप से भी इंगित करना चुना है (इस तथ्य के साथ कि वे गणना के माध्यम से सर्वोत्तम रूप से किए जाते हैं)। –

+0

आपके उत्तर को देखते हुए और ghostdog के उत्तर को देखकर, मैं कुछ सोच रहा हूं। क्या सूची समझ उनके उदाहरण से मानचित्र की तुलना में अधिक मेमोरी का उपयोग करती है, लेकिन क्या एलएएच से धीमा नक्शा() है? बीटीडब्लू, मैंने आपकी पुस्तक को किसी ऐसे व्यक्ति को अनुशंसा की जिसने मुझे पायथन पर मदद के लिए ईमेल किया :) – orokusaki

-3
>>> a=[1,2,3] 
>>> a=[str(i) for i in a ] 
>>> s=a[0] 
>>> for i in a[1:-1]: s="%s,%s"%(s,i) 
... 
>>> s=s+","+a[-1] 
>>> s 
'1,2,3' 
+0

मुझे लगता है कि आप मजाक कर रहे हैं – Mike

-1
def stringTokenizer(sentense,delimiters): 
    list=[] 
    word="" 
    isInWord=False 
    for ch in sentense: 
     if ch in delimiters: 
      if isInWord: # start ow word 
       print(word) 
       list.append(word) 
       isInWord=False 
     else: 
      if not isInWord: # end of word 
       word="" 
       isInWord=True 
      word=word+ch 
    if isInWord: # end of word at end of sentence 
      print(word) 
      list.append(word) 
      isInWord=False 
    return list 

प्रिंट (stringTokenizer (यू "привет парни! Я вам стихами, может быть, еще отвечу", ","))

+0

मैंने नमूना स्ट्रिंग को बदल दिया है क्योंकि यह रूसी बोलने वालों के लिए बहुत आक्रामक है। –

1

पास दो विकल्प हैं,

आप print(*a, sep=',') का उपयोग करके सीधे उत्तर प्रिंट कर सकते हैं, यह विभाजक का उपयोग "," के रूप में करेगा, आपको जवाब मिलेगा,

1,2,3 

और एक अन्य विकल्प है,

print(','.join(str(x) for x in list(a))) 

इस सूची पुनरावृति और के रूप में (क) और प्रिंट उत्पादन प्रिंट होगा

1,2,3 
की [
संबंधित मुद्दे