목록을 "올바르게"인쇄하는 방법은 무엇입니까?


95

그래서 목록이 있습니다.

['x', 3, 'b']

그리고 출력은 다음과 같습니다.

[x, 3, b]

파이썬에서 어떻게 할 수 있습니까?

그렇게하면 str(['x', 3, 'b'])따옴표가있는 하나를 얻지 만 따옴표는 원하지 않습니다.


목록이 "제대로", 인쇄되지 않는 이유를 설명하기 위해 print(["Sam"])통화 repr("Sam")반환, 'Sam'(따옴표 포함), 당신이 달리 전화 print("Sam")와 파이썬 통화를 str("Sam")하는 수익률 Sam(따옴표없이). 자세한 내용 strandrepr 또는 Python strlists의 차이점을 참조하십시오 .
Anonymous

답변:


188

Python 2 :

mylist = ['x', 3, 'b']
print '[%s]' % ', '.join(map(str, mylist))

Python 3에서 (여기서는 print더 이상 구문 기능이 아닌 내장 함수) :

mylist = ['x', 3, 'b']
print('[%s]' % ', '.join(map(str, mylist)))

둘 다 반환 :

[x, 3, b]

이것은 mylist의map() 각 요소에 대해 str을 호출 하는 함수를 사용하여 다음과 같이 하나의 문자열로 결합되는 새로운 문자열 목록을 생성합니다 . 그런 다음 문자열 형식화 연산자가 in 대신 in 문자열을 대체합니다 .str.join()%%s"[%s]"


4
훌륭하게 작동 해 주셔서 감사합니다. 두 번째 줄에서 무엇을하고 있는지 자세히 설명해 주시겠습니까? 저는 파이썬을 처음 사용합니다.
Obaid 2011 년

19
그는 map함수를 사용하여의 str각 요소 를 호출 mylist하고 새 문자열 목록을 만든 다음 str.join. 그런 다음 %문자열 형식 지정 연산자를 사용하여 in 대신 %sin 문자열을 대체합니다 "[%s]".
li.davidm 2011 년

6
그것은 그렇게하는 또 다른 방법은 어쩌면 좀 더 모던 : "[{0}]".format(", ".join(str(i) for i in mylist))
잭 오코너

2
나는 미리 정의 된 콜 러블 일 때보다 선호하는 경향이있다 map(f, xs)(또는 imappython2.x에서) . 더 적은 바이트 코드를 실행하는 경향이 있으며 일반적으로 더 간결합니다. 확실히 해달라고 보다 훨씬 더 먹으 렴(f(x) for x in xs)f map(lambda x:..., xs)(... for x in xs)
SingleNegationElimination

1
@ user1767754 : 정말? 링크?
SingleNegationElimination 2015-06-16

18

이것은 간단한 코드이므로 초보자라면 충분히 쉽게 이해할 수 있어야합니다.

    mylist = ["x", 3, "b"]
    for items in mylist:
        print(items)

원하는대로 따옴표없이 모두 인쇄합니다.


15

인쇄 만 사용 :

>>> l = ['x', 3, 'b']
>>> print(*l, sep='\n')
x
3
b
>>> print(*l, sep=', ')
x, 3, b


9

를 사용하는 대신 반복자를 허용하는 map기능이있는 생성기 표현식을 사용하는 것이 좋습니다 join.

def get_nice_string(list_or_iterator):
    return "[" + ", ".join( str(x) for x in list_or_iterator) + "]"

다음 join은 문자열 클래스의 멤버 함수입니다 str. 하나의 인수, 즉 문자열 목록 (또는 반복자)을 취한 다음 모든 요소가 연결된 새 문자열을 반환합니다 (이 경우) ,.


2
map은 2.x에서 목록을 반환하므로 Python 2에 대한 좋은 최적화입니다. 3.x에서 생성기를 반환하므로 그다지 도움이되지 않습니다.
Tom Zych 2011 년

7
나는 돌아올 것입니다", ".join( str(x) for x in list_or_iterator).join('[]')
eyquem

@eyquem : 영리합니다, 전에는 조인이 그렇게 사용되는 것을 본 적이 없습니다. 그래도 초보자에게는 조금 더 불투명합니다 (문자열이 한 문자 문자열의 반복 가능한 컨테이너라는 속성을 사용하기 때문에).
Seth Johnson

6

인수에 대해 제거 할 문자가 포함 된 문자열이 뒤에 오는 인수 for translate()메서드 를 사용하여 문자열에서 원하지 않는 모든 문자를 삭제할 수 있습니다 .Nonetabledeletechars

lst = ['x', 3, 'b']

print str(lst).translate(None, "'")

# [x, 3, b]

2.6 이전 버전의 Python을 사용하는 경우 인수로 전달하는 기능이 Python 2.6까지 추가되지 않았기 때문에 대신 string모듈의 translate()함수 를 사용해야합니다 . 사용하면 다음과 같습니다.Nonetable

import string

print string.translate(str(lst), None, "'")

string.translate()기능을 사용하는 것은 2.6 이상에서도 작동하므로 사용하는 것이 좋습니다.


2
아아 : lst = ["it isn't", 3, 'b']==> ["it isnt", 3, b]그리고 또한lst = ['it isn\'t', 3, 'b']
eyquem 2011 년

1
@eyquem : 예, 실제로 데이터의 일부인 문자를 삭제하는 것을 피하려면 (엄격하게 구분하는 데 사용되지 않고) 가능성이있는 경우 자연스럽게 약간 더 정교하고 다른 논리가 필요합니다.
martineau 2011 년

3

다음은 @TokenMacGuy의 한 줄짜리 단계를 보여주는 대화식 세션입니다. 먼저 그는 map함수를 사용하여 목록의 각 항목을 문자열로 변환합니다 (실제로 그는 이전 목록의 항목을 변환하지 않고 새 목록을 만들고 있음). 그런 다음 문자열 메서드 join를 사용하여 해당 문자열을', ' 합니다. 나머지는 문자열 형식화로 매우 간단합니다. (편집 :이 인스턴스는 간단합니다. 일반적으로 문자열 형식은 다소 복잡 할 수 있습니다.)

using join은 여러 하위 문자열에서 문자열을 만드는 간단하고 효율적인 방법이며, 문자열에 문자열을 연속적으로 추가하는 것보다 훨씬 효율적입니다.

>>> mylist = ['x', 3, 'b']
>>> m = map(str, mylist)
>>> m
['x', '3', 'b']
>>> j = ', '.join(m)
>>> j
'x, 3, b'

2

사용하여 .format문자열 서식,

mylist = ['x', 3, 'b']
print("[{0}]".format(', '.join(map(str, mylist))))

산출:

[x, 3, b]

설명:

  1. map목록의 각 요소를 string유형 에 매핑하는 데 사용됩니다 .
  2. 요소는 ,구분 기호로 문자열로 결합됩니다 .
  3. 우리는 사용 []인쇄 문에서 목록의 괄호를 표시합니다.

참조 : .format문자열 형식화 PEP-3101


큰! 나는 .format가장 비단뱀적인 방법을 사용 합니다. 그러나 물론 나는 의견 차이를 받아들입니다. ;)
loved.by.Jesus

0

저는 @AniMenon에서 영감을 받아보다 일반적인 파이썬 솔루션을 작성했습니다.

mylist = ['x', 3, 'b']
print('[{}]'.format(', '.join(map('{}'.format, mylist))))

format방법 만 사용합니다 . 의 추적이 없으며 str요소 형식을 미세 조정할 수 있습니다. 예를 들어, 목록의 요소로 부동 숫자가있는 경우 변환 지정자를 추가하여 형식을 조정할 수 있습니다.이 경우:.2f

mylist = [1.8493849, -6.329323, 4000.21222111]
print("[{}]".format(', '.join(map('{:.2f}'.format, mylist))))

출력은 상당히 괜찮습니다.

[1.85, -6.33, 4000.21]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.