web-dev-qa-db-ja.com

リストアイテムを印刷するPythonicの方法

私はこれよりもPythonのリスト内のすべてのオブジェクトを印刷するより良い方法があるかどうかを知りたいです。

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

そうでなければ、私の質問は...なぜですか?もし私たちが包括的なリストを使ってこの種のことをすることができるならば、なぜリストの外の単純な声明としてではないのでしょうか?

96

Python 3.xを使用していると仮定します。

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

コメントのmgilsonで述べられているように、Python 2.xでもfrom __future__ import print_functionを使用して同じ動作を得ることができます。

Python 2.xのprint文では、print(p) for p in myListが機能しないというあなたの質問に関して、何らかの繰り返しが必要になるでしょう。同じことをしていて、まだ一行である次のようにしてください。

for p in myList: print p

'\n'.join()を使う解決法のために、私はおそらくmap()よりリスト内包表記とジェネレータを好むので、私はおそらく以下を使うでしょう:

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

私はこれをいつも使っています:

#!/usr/bin/python

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

[print(a) for a in list]はすべての項目を出力しますが、最後にNone型の束を与えます。

6
ytpillai

Python 2の場合*:

Personクラスの関数__str __()をオーバーロードする場合は、map(str、...)の部分を省略できます。もう1つの方法は、あなたが書いたように、関数を作成することです。

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

...

write_list(MyList)

Python 3には*があります。* print()関数の引数sep。ドキュメントを見てください。

3
gukoff

@ lucasgの回答を拡大しました(受け取ったコメントに触発されました)。

フォーマットされたリスト出力を得るためには、これらの行に沿って何かをすることができます:

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

01, 02, 05

これで", "はセパレータを提供し(最後ではなく項目間のみ)、'02d'と結合されたフォーマット文字列%xxの各フォーマットのフォーマットされた文字列を与えます。

3
Floris

各コンテンツを表示するには、次のようにします。

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.')

私が助けたことを願っています。

2
ShinyMemes

リストの内容を見たいだけなら、これが最も便利だと思います。

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

シンプルで読みやすく、フォーマット文字列と一緒に使用できます。

1
Rongzhao Zhang

OPの質問は以下のとおりです。以下のようなことがありますが、そうでない場合はなぜ

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

答えは、それは存在しますこれは、

[p for p in myList] #works perfectly

基本的には、リストの理解には[]を使い、printの出力を避けるためにNoneを取り除いてください。 printNoneを印刷する理由を確認するには、 this を参照してください。

1
Gaurav Singhal

私は最近パスワードジェネレータを作りました、そして私はpythonに非常に新しいですが、私はこれをリストにすべての項目を表示する方法としてあなたのニーズに合うように小さな編集で...ホイップしました...

    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はPythonにはとても新しく、これは専門家にとって不格好な方法であると確信していますが、別の例としてここに来ただけです。

1
Nate Baker

あなたのリストがうまく印刷されているとしたら[1,2,3]、Python3の簡単な方法は次の通りです。

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、 'lorem'、 'ipsum'、 'dolor'、 'sit'、 'amet']

0
Aethalides