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


114

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

そうでない場合、私の質問は...なぜですか?包括的なリストでこの種のことを行うことができるなら、リスト外の単純なステートメントとしてはどうでしょうか?


3
使い方for p in myListが「良くない」という印象はどこで得ましたか?
Jon Clements


@pelotasplus:すべてではない:)で私は本当に「読み」ではありません私の最初のバージョンのようではないやり方によって
ギヨームヴォアロン

回答:


220

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

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

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

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) 

3
そうでない場合は、from __future__ import print_functionpython2.6以降で実行できます。
mgilson 2013

python 2xでは、マップを使用すると、リスト内包表記で結合を使用するよりもわずかに高速になります。
ファンカルロスモレノ

1
なぜ反対投票なのか、それは本当にmap()と発電機の速度の違いによるものですか? Pythonの作成者は、たまたま内包表記やジェネレーターを優先しmap()ます。
アンドリュークラーク

私はあなたに反対票を投じませんでした。私はGVRからの投稿によく耳を傾けていました。当時の彼の言い方は、Pythonの将来のバージョンではどのように組み込まれないのかということですが、最終的にはそのままでした。
ファンカルロスモレノ

1
彼らはPython 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])
ChrisFreeman

8

[print(a) for a in list] 最後にNoneタイプの束を与えますが、すべてのアイテムを出力します


これは私がこれまで使ってきたものです。それは1行で、非常に明確で表現力がありますが、リンターは「表現は何にも割り当てられていません」という不満を述べています
alete

1
リンターをトロールしたい場合は、リンターを出力して愚かな値を返す別の関数を作成し、リスト内包表記でその関数を呼び出すことができます
ytpillai

3

Python 2. *の場合:

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

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

...

write_list(MyList)

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


3

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

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

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を使用していますが、インデックスとして別の変数indexvalを使用していますか?あなたはPythonのシンプルさと戦っています。my_listのvalの場合:print valは、あなたが持っているものと同じです
BretD

1

これは、リストのコンテンツを見たいだけの場合に最も便利だと思います。

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

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


1

OPの質問は次のとおりです。

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

答えは、それは、ある存在です。

[p for p in myList] #works perfectly

基本的には[]、リストの理解のために使用printし、印刷を回避するために取り除きますNoneprintプリントがこれを見る理由をNone確認するには


1

私は最近パスワードジェネレーターを作成しましたが、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)

私が言ったように、私はPythonにとって非常に新しいです、そしてこれは専門家にとって不器用な方法であると確信していますが、私は別の例のためにここにいます


0

リストが[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}")

これを実行すると、次の出力が生成されます。

このloremリストには8つの項目があります:[1、2、3、「lorem」、「ipsum」、「dolor」、「sit」、「amet」]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.