পাইথনে একটি তালিকা কীভাবে প্রিন্ট করবেন "সুন্দরভাবে"


92

পিএইচপি-তে, আমি এটি করতে পারি:

echo '<pre>'
print_r($array);
echo '</pre>'

পাইথনে, আমি বর্তমানে কেবল এটি করছি:

print the_list

যাইহোক, এটি ডেটা একটি বৃহত জাম্বো কারণ হবে। এটি পাঠযোগ্য গাছের মধ্যে সুন্দরভাবে মুদ্রণের কোনও উপায় আছে কি? (ইনডেন্ট সহ)?

উত্তর:


173
from pprint import pprint
pprint(the_list)

কিভাবে একটি ফাইল মুদ্রণ?
মাওগ বলছে মনিকা

4
শুধু ব্যবহার import pprintকরবেন না কেন ?
clankill3r

19
@ clankill3r, তবে আপনার pprint.pprint(the_list)সাধারণত এটি ব্যক্তিগত পছন্দ হিসাবে বিবেচনা করা উচিত। আমি এক্ষেত্রে আমদানি লাইনে অতিরিক্ত বিশৃঙ্খলা রাখতে পছন্দ করেছি।
জন লা রোয়

4
@ মাওগ, আপনি একটি আউটপুট স্ট্রিম ব্যবহার করে নির্দিষ্ট করতে পারবেন, ডিফল্টটি স্টডআউট stream=docs.python.org/3/library/ppint.html
জন লা রোয়

এটি আইপিথন আরপিএল-এ ডিফল্টরূপে সক্ষম হয়েছে
আজমসা

32

ডিবাগ করার সময় একটি দ্রুত হ্যাক যা আমদানি pprintনা করেই কাজ করে তা হল তালিকায় যোগ দেওয়া '\n'

>>> lst = ['foo', 'bar', 'spam', 'egg']
>>> print '\n'.join(lst)
foo
bar
spam
egg

তালিকার অন্তর্ভুক্ত থাকলে টাইপ-এয়ারর None
নওম্যানন

সহজ সমাধান এবং list "তালিকার মতো: * {।"। ফর্ম্যাট ('* n *'। জোইন (lst))
ড্যানিজেডোগ 23:38

আপনার তালিকায় যখন অন্য কিছু রয়েছে তখন স্ট্রিংগুলি আপনার করা উচিতprint '\n'.join(map(str, lst))
স্পিরিট

25

মুদ্রণ ফাংশন আর্গুমেন্টে কেবল তালিকাটি "আনপ্যাক করে" এবং বিভাজক হিসাবে একটি নতুন লাইন (\ n) ব্যবহার করে।

মুদ্রণ (* lst, sep = '\ n')

lst = ['foo', 'bar', 'spam', 'egg']
print(*lst, sep='\n')

foo
bar
spam
egg

4
দুর্দান্ত তবে দুর্ভাগ্যক্রমে কেবল পাইথন 3 এ উপলভ্য
অ্যান্টনি ল্যাবারে

4
পাইথন ২.7 এ আপনার যদি সত্যিই এটির প্রয়োজন হয় তবে আপনি ভবিষ্যতে মুদ্রণ ফাংশনটি আমদানি করতে পারেন from __future__ import print_function মন্তব্যের জন্য ধন্যবাদ।
MarcoP

21

আপনার বোঝার মতো কিছু ...:

>>> print L
['this', 'is', 'a', ['and', 'a', 'sublist', 'too'], 'list', 'including', 'many', 'words', 'in', 'it']
>>> import pprint
>>> pprint.pprint(L)
['this',
 'is',
 'a',
 ['and', 'a', 'sublist', 'too'],
 'list',
 'including',
 'many',
 'words',
 'in',
 'it']
>>> 

...? আপনার কার্সারি বর্ণনা থেকে, মানক গ্রন্থাগার মডিউল প্রিন্ট হ'ল প্রথম জিনিস যা মনে আসে; তবে, যদি আপনি উদাহরণস্বরূপ ইনপুট এবং আউটপুটগুলি বর্ণনা করতে পারেন (যাতে আপনাকে সাহায্য করার জন্য পিএইচপি শিখতে না হয় ;-), আমাদের আরও নির্দিষ্ট সহায়তা দেওয়া সম্ভব হতে পারে!



2

https://docs.python.org/3/library/pprint.html

আপনার যদি পাঠ্যের প্রয়োজন হয় (উদাহরণস্বরূপ অভিশাপ সহ ব্যবহার করার জন্য):

import pprint

myObject = []

myText = pprint.pformat(myObject)

তারপরে myTextচলক কিছু পিএলএইচপি যেমন var_dumpবা করতে পারে print_r। আরও বিকল্প, আর্গুমেন্টের জন্য ডকুমেন্টেশন চেক করুন।


2

অন্য উত্তরগুলির হিসাবে পিপ্রিন্ট মডিউলটি কৌশলটি করে।
তবুও, ডিবাগিংয়ের ক্ষেত্রে যেখানে আপনাকে পুরো তালিকাটি কিছু লগ ফাইলের মধ্যে লাগাতে হবে সেখানে পিপ্রিন্টের সাথে মডিউল লগিংয়ের সাথে ফর্ম্যাট পদ্ধতি ব্যবহার করতে হবে ।

import logging
from pprint import pformat

logger = logging.getLogger('newlogger')
handler = logging.FileHandler('newlogger.log')

formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
handler.setFormatter(formatter)

logger.addHandler(handler) 
logger.setLevel(logging.WARNING)

data = [ (i, { '1':'one',
           '2':'two',
           '3':'three',
           '4':'four',
           '5':'five',
           '6':'six',
           '7':'seven',
           '8':'eight',
           })
         for i in xrange(3)
      ]

logger.error(pformat(data))

এবং যদি আপনাকে এটি সরাসরি কোনও ফাইলে লগ করতে হয় তবে স্ট্রিম কীওয়ার্ড ব্যবহার করে একটিকে আউটপুট স্ট্রিম নির্দিষ্ট করতে হবে। রেফারেন্স

from pprint import pprint

with open('output.txt', 'wt') as out:
   pprint(myTree, stream=out)

দেখুন স্টেফানো Sanfilippo এর উত্তর


2

পাইথন 3-এর জন্য আমি শেক্সফির উত্তরের মতো একই ধরণের কাজটি করেছি :

def print_list(my_list):
    print('\n'.join(my_list))

a = ['foo', 'bar', 'baz']
print_list(a)

যা ফলাফল

foo
bar
baz

সরাইয়া হিসাবে, আমি খুব শীঘ্রই একটি পান্ডাস ডেটা ফ্রেমে কলামগুলি দেখতে একই অনুরূপ সহায়ক ফাংশনটি ব্যবহার করি

def print_cols(df):
    print('\n'.join(df.columns))

0

অন্যান্য উত্তরের হিসাবে উল্লেখ করা হয়েছে, pprintএকটি দুর্দান্ত মডিউল যা আপনাকে যা চায় তা করবে। তবে আপনি যদি এটি আমদানি করতে না চান এবং বিকাশের সময় কেবলমাত্র ডিবাগিং আউটপুট মুদ্রণ করতে চান তবে আপনি এর আউটপুট আনুমানিক করতে পারেন।

অন্যান্য উত্তরগুলির মধ্যে কয়েকটি স্ট্রিংয়ের জন্য সূক্ষ্মভাবে কাজ করে তবে আপনি যদি শ্রেণি অবজেক্টের সাথে এগুলি চেষ্টা করেন তবে এটি আপনাকে ত্রুটিটি দেবে TypeError: sequence item 0: expected string, instance found

আরও জটিল অবজেক্টের জন্য, নিশ্চিত করুন যে শ্রেণীর কাছে এমন একটি __repr__পদ্ধতি রয়েছে যা আপনার পছন্দসই সম্পত্তি সম্পর্কিত তথ্য প্রিন্ট করে:

class Foo(object):
    def __init__(self, bar):
        self.bar = bar

    def __repr__(self):
        return "Foo - (%r)" % self.bar

এবং তারপরে আপনি যখন আউটপুট মুদ্রণ করতে চান তখন কেবল আপনার তালিকাকে strএই জাতীয় ফাংশনে ম্যাপ করুন :

l = [Foo(10), Foo(20), Foo("A string"), Foo(2.4)]
print "[%s]" % ",\n ".join(map(str,l))

ফলাফল:

 [Foo - (10),
  Foo - (20),
  Foo - ('A string'),
  Foo - (2.4)]

নেস্টেড সুন্দর প্রিন্টিংয়ের একটি ফর্ম পাওয়ার __repr__পদ্ধতিটি ওভাররাইডের মতো কাজ আপনি করতে পারেন list:

class my_list(list):
    def __repr__(self):
        return "[%s]" % ",\n ".join(map(str, self))

a = my_list(["first", 2, my_list(["another", "list", "here"]), "last"])
print a

দেয়

[first,
 2,
 [another,
 list,
 here],
 last]

দুর্ভাগ্যক্রমে দ্বিতীয় স্তরের কোনও ইন্ডেন্টেশন নয় তবে দ্রুত ডিবাগের জন্য এটি কার্যকর হতে পারে।


0

আপনি নিজের তালিকাটি লুপও করতে পারেন:

def fun():
  for i in x:
    print(i)

x = ["1",1,"a",8]
fun()

হ্যালো! কোডটি যেমন ফর্ম্যাট করুন তবে এটি অনুসরণ করা সহজ নয়। এছাড়াও, গ্লোবাল বলতে বোঝায় না যে এটি অজগরটিতে সেভাবে ব্যবহৃত হয়। Stackoverflow.com/questions/423379/…
ভ্যালেন্টিনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.