2016-10-01 2 views
1

저는 Python 3을 사용 중이며 항목이 목록의 마지막 항목인지 감지하려고 시도하지만 때로는 반복됩니다. 나는이 출력하고자항목이 목록의 마지막 항목인지 확인

a = ['hello', 9, 3.14, 9] 
for item in a: 
    print(item, end='') 
    if item != a[-1]: 
     print(', ') 

: 그리고 이것은 내 코드입니다

hello, 
9, 
3.14, 
9 

을하지만이 출력 얻을 : 왜 내가하지 않는 출력을 얻고있다

hello, 
93.14, 
9 

이해를 필요. 루프를 계속 사용할 수 있으면 좋겠지 만 그 루프를 해결할 수는 있습니다.

+3

하지 않음 루프를 사용하여 :'print (* a, sep = ', \ n')' –

+0

@MartijnPieters 와우, 고마워. 왜 마지막 항목에 쉼표가 추가되지 않습니까? – nedla2004

+0

@ nedla2004 : 왜냐하면 'sep'는 요소들 사이에있는 * separator *이기 때문입니다. 'end'는 마지막 요소 뒤에 오는 종결 자입니다. – torek

답변

9

보다는 시도하고 당신이 마지막 항목에있는 경우 감지, 다음를 인쇄 할 때 (콤마와 줄 바꿈 인쇄를 (좀 더 복잡한 코드로이 사용하고자)하는 당신은에있는 경우에만 감지 필요 제)

a = ['hello', 9, 3.14, 9] 
for i, item in enumerate(a): 
    if i: # print a separator if this isn't the first element 
     print(',') 
    print(item, end='') 
print() # last newline 

enumerate() 함수는 각 요소에 대한 카운터 (What does enumerate mean? 참조)를 추가하고,이 if i:0 제외 카운터 (제 소자)의 모든 값에 대해 사실이다.

또는 삽입 print()를 사용 분리기 :

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

sep 값 (*aWhat does ** (double star) and * (star) do for parameters? 참조 개별 인자로 a 모든 값을인가), 각 인자들 사이에 삽입된다. print(',n'.join(map(str, a)))을 사용하는 것보다 훨씬 효율적입니다. 처음에는 완전히 새로운 문자열 객체를 작성할 필요가 없기 때문입니다.

+0

정확히 내가 원하는 것, 나는 아직 그것을 받아 들일 수 없다. – nedla2004

+0

또한 두 가지 방법을 모두 설명해 주시겠습니까? (나는 완전히 혼란 스럽다.) – nedla2004

+0

@ nedla2004 : 어떤 부분이 혼란 스럽습니까? ['enumerate()'] [https://stackoverflow.com/questions/22171558/what-does-enumerate-mean]은 무엇입니까? 아니면'if i :'가 첫 번째 요소를 제외한 모든 것을 앞세워하는 이유는 무엇입니까? –

5

당신은 정말 그때는 str.join 방법을 사용하는 것이 더 쉽습니다 쉼표 + 개행 문자로 구분 된 문자열로 당신의 요소를 결합 할 경우

그냥 항목이 지난 있는지 찾고 있다면
elements = ['hello', 9, 3.14, 9] 
s = ',\n'.join(str(el) for el in elements) 
# And you can do whatever you want with `s` string: 
print(s) 
+0

@MartijnPieters, 물론,'print'는 문자열을 출력하고 나중에 그 문자열을 조작 할 기회가 있습니다. – skovorodkin

+0

지도를 사용할 수도 있습니다! 'print (', \ n'.join (map (str, elements)))' –

0

(또는 모든 목록의 항목)을 사용하면 항목이 목록의 마지막인지 확인하는 기능을 사용해 볼 수 있습니다. 코드에서 당신이 말하는 "현재의 요소가 마지막 요소와 동일하지 않은 경우 헤이 파이썬, 쉼표를 인쇄 할 수 있습니다."때문에

a = ['hello', 9, 3.14, 9] 
def is_last(alist,choice): 
     if choice == alist[-1]: 
      print("Item is last in list!") 
      return True 
     else: 
      print("Item is not last") 
      return False 

if is_last(a,9) == True: 
    <do things> 

else: 
    <do other things> 
+0

네, 파이썬은 음수 인덱스를 사용하여 목록에서 오른쪽에서 왼쪽으로 계산합니다. – AgataB

+0

'is_last (a, 9)'는'a [1]'과'a [3]'모두'True' ** 두 번 **을 반환합니다. 또한,'if' 문에서'== True'를 사용하지 말고 진실을'if'에 직접 테스트하십시오. –

3

당신이 예상 출력을 받고 있지 않습니다

두 번째 요소 9는 마지막 요소와 같으므로 쉼표가 인쇄되지 않습니다.

마지막 요소를 확인하는 올바른 방법은 요소의 인덱스 확인하는 것입니다 : (. 또한,이 값 오류가 발생 할 수 당신은 그것도 확인해야합니다.)

a = ['hello', 9, 3.14, 9] 
for item in a: 
    print(item, end='') 
    if a.index(item) != len(a)-1: #<--------- Checking for last element here 
     print(', ') 

관련 문제