목록 항목을 인쇄하는 Pythonic 방법


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 : 모든 :)에서 그리고 "읽기"아니다 나는 나의 첫 번째 버전별로 좋아하지 않아요 그런데
기욤 Voiron의

답변:


220

Python 3.x를 사용한다고 가정합니다.

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

from __future__ import print_functionmgilson이 주석에 언급 한대로를 사용하여 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-04-02

파이썬 2x에서 map을 사용하는 것은 목록 이해에서 조인을 사용하는 것보다 약간 빠릅니다.
Juan Carlos Moreno 2013

1
왜 반대표를 던지는 이유는 실제로 map()와 발전기 의 속도 차이 때문 입니까? Python의 제작자는 또한map() .
Andrew Clark

나는 당신에게 투표하지 않았습니다. 나는 GVR의 게시물에 대해 잘 알고 있는데, 당시 그의 방식은 python의 미래 버전이 그것을 포함하지 않을 것이지만 결국 머물 렀습니다.
Juan Carlos Moreno 2013

1
그들은 파이썬 3.x의에서 숙박을했지만 그 기사에서 자신의 점은이 [F(x) for x in S]보다 더 명확하다 map(F, S). 성능은 여기서 다루지 않지만 속도 차이는 미미할 것으로 예상합니다. 어쨌든 나는 반대표에 대해 혼란 스러웠습니다. 당신이라고 생각해서 미안합니다!
Andrew Clark

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 유형을 제공합니다.


이것이 제가 지금까지 사용해온 것입니다. 그것은 매우 분명하고 expresive 한 줄,하지만 린터 불만 "는 표현은 아무것도에 할당"
alete

1
linter를 트롤링하고 싶다면 그것을 출력하고 어리석은 값을 반환하는 별도의 함수를 만들고 목록 이해력에서 그 함수를 호출 할 수 있습니다
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.이 경우에는 두 자리 정수로 서식이 지정되고 왼쪽이 0으로 채워집니다.


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을 인덱스로 사용합니까 ?? 당신은 파이썬의 단순성에 맞서 싸우고 있습니다. 을 my_list에 발을 위해 : 인쇄 발 당신이 가진 것과 같은 일
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인쇄를 피하려면 제거하십시오 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] 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.