सूची आइटम प्रिंट करने का पाइथोनिक तरीका


114

मैं यह जानना चाहूंगा कि क्या पायथन सूची में सभी वस्तुओं को प्रिंट करने का एक बेहतर तरीका है:

myList = [Person("Foo"), Person("Bar")]
print("\n".join(map(str, myList)))
Foo
Bar

मैं इस तरह से पढ़ा है वास्तव में अच्छा नहीं है:

myList = [Person("Foo"), Person("Bar")]
for p in myList:
    print(p)

क्या ऐसा कुछ नहीं है:

print(p) for p in myList

यदि नहीं, तो मेरा प्रश्न है ... क्यों? यदि हम इस तरह के सामान को व्यापक सूचियों के साथ कर सकते हैं, तो एक सूची के बाहर एक साधारण कथन के रूप में क्यों नहीं?


3
आपको यह धारणा कहां से मिली कि उपयोग करना for p in myList"वास्तव में अच्छा नहीं था"?
जॉन क्लेमेंट्स


@pelotasplus: बिलकुल नहीं :) और वैसे मुझे वास्तव में अपना पहला संस्करण पसंद नहीं है, जो "पठनीय" नहीं है
Guillaume Voiron

जवाबों:


220

मान लें कि आप पायथन 3.x का उपयोग कर रहे हैं:

print(*myList, sep='\n')

आप from __future__ import print_functionटिप्पणी में mgilson द्वारा उल्लेख के रूप में, पायथन 2.x का उपयोग करने पर एक ही व्यवहार प्राप्त कर सकते हैं ।

पायथन 2.x पर प्रिंट स्टेटमेंट के साथ आपको किसी प्रकार के पुनरावृत्ति की आवश्यकता होगी, print(p) for p in myListकाम नहीं करने के बारे में आपके प्रश्न के बारे में , आप बस निम्नलिखित का उपयोग कर सकते हैं जो एक ही काम करता है और अभी भी एक पंक्ति है:

for p in myList: print p

उपयोग करने वाले समाधान के लिए '\n'.join(), मैं सूची समझ और जनरेटर को पसंद करता हूं, map()इसलिए मैं शायद निम्नलिखित का उपयोग करूंगा:

print '\n'.join(str(p) for p in myList) 

3
और यदि नहीं, तो आप from __future__ import print_functionpython2.6 और नए पर कर सकते हैं ।
mgilson

पायथन 2x में मानचित्र का उपयोग सूची बोध में शामिल होने की तुलना में थोड़ा तेज है।
जुआन कार्लोस मोरेनो

1
क्यों घटता है, यह वास्तव में map()और एक जनरेटर के बीच गति अंतर के कारण है ? अजगर का निर्माता भी समझ और पसंद करने वालों को पसंद करता हैmap()
एंड्रयू क्लार्क

मैंने आपको वोट नहीं दिया। मैं GVR की उस पोस्ट से परिचित हूं जो उनके कहने का तरीका था, वापस, फिर कैसे अजगर के भविष्य के संस्करण इसे शामिल नहीं करने जा रहे थे, लेकिन उन्होंने रहना समाप्त कर दिया।
जुआन कार्लोस मोरेनो

1
वे पायथन 3.x में बने रहे, लेकिन उस लेख में उनकी बात यह है कि [F(x) for x in S]की तुलना में अधिक स्पष्ट है map(F, S)। प्रदर्शन को वहां संबोधित नहीं किया गया है, लेकिन मुझे उम्मीद है कि गति का अंतर नगण्य होगा। वैसे भी मैं बस नीचे के बारे में उलझन में था, माफ करना मैंने मान लिया कि यह आप थे!
एंड्रयू क्लार्क

28

यह मेरे लिए हर समय उपयोगी है :

#!/usr/bin/python

l = [1,2,3,7] 
print "".join([str(x) for x in l])

1
जोड़ने के लिए format(), str(x)एक प्रारूप स्ट्रिंग के साथ बदलें :print " ".join(["{:02d}".format(x) for x in l])
क्रिसफ्रेमेन

8

[print(a) for a in list] अंत में कोई भी प्रकार का गुच्छा नहीं देगा, हालांकि यह सभी वस्तुओं को प्रिंट करता है


यह वही है जो मैं अब तक उपयोग कर रहा हूं। यह एक पंक्ति है, बहुत स्पष्ट और स्पष्ट है, लेकिन लिंटर की शिकायतें "अभिव्यक्ति कुछ भी नहीं सौंपी गई है"

1
यदि आप लिंटर को ट्रोल करना चाहते हैं, तो आप एक अलग फ़ंक्शन बना सकते हैं जो इसे प्रिंट करता है और कुछ बेवकूफ मूल्य देता है और उस फ़ंक्शन को सूची में कॉल करता है
ytpillai

3

अजगर के लिए 2. *:

यदि आप अपने व्यक्ति वर्ग के लिए __str __ (__str) फ़ंक्शन को ओवरलोड करते हैं, तो आप नक्शे (str, ...) के साथ भाग को छोड़ सकते हैं। इसके लिए एक और तरीका एक समारोह बना रहा है, जैसे आपने लिखा है:

def write_list(lst):
    for item in lst:
        print str(item) 

...

write_list(MyList)

पायथन 3 में है। * प्रिंट () फ़ंक्शन के लिए तर्क एसईपी । प्रलेखन पर एक नज़र डालें।


3

@ लुकासग के उत्तर का विस्तार (प्राप्त की गई टिप्पणी से प्रेरित):

स्वरूपित सूची आउटपुट प्राप्त करने के लिए , आप इन पंक्तियों के साथ कुछ कर सकते हैं:

l = [1,2,5]
print ", ".join('%02d'%x for x in l)

01, 02, 05

अब ", "विभाजक प्रदान करता है (केवल वस्तुओं के बीच, अंत में नहीं) और स्वरूपण स्ट्रिंग '02d'के साथ संयुक्त %xप्रत्येक आइटम के लिए एक स्वरूपित स्ट्रिंग देता है x- इस मामले में, दो अंकों के साथ पूर्णांक के रूप में स्वरूपित, शून्य से भरा हुआ।


2

प्रत्येक सामग्री को प्रदर्शित करने के लिए, मैं उपयोग करता हूं:

mylist = ['foo', 'bar']
indexval = 0
for i in range(len(mylist)):     
    print(mylist[indexval])
    indexval += 1

एक समारोह में उपयोग करने का उदाहरण:

def showAll(listname, startat):
   indexval = startat
   try:
      for i in range(len(mylist)):
         print(mylist[indexval])
         indexval = indexval + 1
   except IndexError:
      print('That index value you gave is out of range.')

आशा है कि मैंने मदद की।


1
एक नोट के रूप में, कृपया अपने ऊपर के उत्तर की जांच करें। आप एक सीमा का उपयोग करते हैं, जो एक सूचकांक मूल्य प्रदान करता है, i, फिर भी आप अपने सूचकांक के रूप में एक और चर, अनुक्रमणिका का उपयोग करते हैं, ?? आप अजगर की सादगी के खिलाफ लड़ रहे हैं। my_list में वैल के लिए: प्रिंट वैल वैसा ही करता है जैसा आपके पास है
BretD

1

मुझे लगता है कि यह सबसे सुविधाजनक है यदि आप सूची में सामग्री देखना चाहते हैं:

myList = ['foo', 'bar']
print('myList is %s' % str(myList))

सरल, पढ़ने में आसान और प्रारूप स्ट्रिंग के साथ एक साथ उपयोग किया जा सकता है।


1

ओपी का प्रश्न है: क्या निम्नलिखित कुछ मौजूद है, यदि नहीं तो क्यों

print(p) for p in myList # doesn't work, OP's intuition

जवाब है, यह मौजूद है जो है:

[p for p in myList] #works perfectly

मूल रूप से, []सूची समझ के लिए उपयोग करें और छुटकारा पाएंprint मुद्रण से बचने लिएNone । यह देखने के लिए क्यों printप्रिंट Noneदेखना यह


1

मैंने हाल ही में एक पासवर्ड जनरेटर बनाया है और हालांकि मैं अजगर के लिए बहुत नया हूँ, मैंने इसे एक सूची में सभी वस्तुओं को प्रदर्शित करने के तरीके के रूप में व्हीप्ड किया (आपकी आवश्यकताओं को पूरा करने के लिए छोटे संपादन के साथ ...

    x = 0
    up = 0
    passwordText = ""
    password = []
    userInput = int(input("Enter how many characters you want your password to be: "))
    print("\n\n\n") # spacing

    while x <= (userInput - 1): #loops as many times as the user inputs above
            password.extend([choice(groups.characters)]) #adds random character from groups file that has all lower/uppercase letters and all numbers
            x = x+1 #adds 1 to x w/o using x ++1 as I get many errors w/ that
            passwordText = passwordText + password[up]
            up = up+1 # same as x increase


    print(passwordText)

जैसा कि मैंने कहा, IM VERY NEW to Python और मुझे यकीन है कि यह एक विशेषज्ञ के लिए स्पष्ट है, लेकिन मैं सिर्फ एक उदाहरण के लिए कह रहा हूं


0

यह मानते हुए कि आपकी सूची [1,2,3] मुद्रित होने के साथ ठीक है, तो पायथन 3 में एक आसान तरीका है:

mylist=[1,2,3,'lorem','ipsum','dolor','sit','amet']

print(f"There are {len(mylist):d} items in this lorem list: {str(mylist):s}")

इसे चलाने से निम्न आउटपुट का उत्पादन होता है:

इस लोरेम सूची में 8 आइटम हैं: [1, 2, 3, 'लोरेम', 'इप्सम', 'डोलर', 'सिट', 'अमेट']

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