2011-04-21 7 views
5

IP 주소가 가득한 목록이 있습니다. 목록을 반복하여 각 IP 주소를 인쇄하고 싶습니다. 나는이 일을하려고 할 때 :Python : 괄호와 작은 따옴표없이 목록을 인쇄 하시겠습니까?

def printList(theList): 
    for item in theList: 
     print item 

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

['8.0.226.5'] 
['8.0.247.5'] 
['8.0.247.71'] 
['8.0.249.28'] 
['8.0.249.29'] 

나는 루프에서 "[0] 인쇄 항목"을 포함하여 모든 것을 시도했다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+9

정말요? 'print item [0]'을 할 때 어떤 일이 일어 났습니까? –

+0

IndexError : 목록 색인이 범위를 벗어났습니다 – Dan

+3

이 목록의 모양을 보여 주시겠습니까? –

답변

6

목록의 각 항목은 그 자체로 싱글 톤 목록입니다. 이것에 대한 이유는 없습니다 - 당신이 이름을 지을 수 없다면 (re.findall을 통해 re.find을 사용하거나 re.findall이 반환 한 목록에서 하나의 항목을 반환함으로써)이 경우와 같이 문제가됩니다. .

관계없이 목록에서 하나의 요소를 인쇄하는 것으로, print item[0] 작동해야하고, 목록의 str()는 달리, 그것은 따옴표를 일으키는 (첫번째 repr를 통해 항목을 실행되지 않고 어떤이 있다면 인쇄 할 수없는 문자를 이스케이프 것 문자열에서). 중복 된 싱글 톤 목록을 제거하면 print '\n'.join(items)도 작동합니다.

theList에 빈 목록이 있으면 코드에서 오류가 발생합니다. recentFile에 IP와 같은 형식이없는 줄이있는 경우 빈 목록은 returnIP에 의해 반환되고 comparisonFile에있는 줄이면 (시작 부분에 설명이 포함 된 이름으로 열지 만 열기 chechMatch에 설명이 포함되지 않은 이름이 반복적으로 포함 된 경우) IP 주소가 하나도 포함되어 있지 않은 경우 빈 목록이 물론 빈 목록과 동일한 매개 변수 ip이 전달됩니다. 따라서 비 IP 이름이 recentFile 인 경우 빈 목록이 추가됩니다. 이 모든 문제는 returnIP에서 싱글 톤 목록 대신 문자열을 반환하면 현재 줄에 IP가 없을 때 None을 사용하고 returnIPNone이면 compareFiles으로 검사/추가를 건너 뜁니다.

+0

나는 그것을 이해했다. 명백하게 목록의 꼭대기에 비어있는 항목이 있었다. 그래서 그것은 거기에서 멈추고 있었다. 당신의 도움을 주셔서 감사합니다!편집 : 나는 회원이 아니거나 upvote 줄 :( – Dan

+0

@ Dan : 그것이 일어나는 이유와 그것을 해결하는 방법에 대한 자세한 설명을 추가했습니다. 조금 늦었지만 도움이된다면 ... :) – delnan

+0

감사! comparisonFile의 경우 원래 나중에 참조하고 있었지만 어떤 이유로 변수 이름을 사용할 때 작동하지 않으므로 인라인 열기 함수로 바꾸려고 시도했지만 제대로 작동했습니다. 왜 이런 일이 일어 났는지 모르겠습니다. 나는 문제를 재현하고 그것을 파악하려고 노력할 수도있다. – Dan

0

생각해 보면 theList은 IP 목록이 아니라 IP 목록 (각 요소가 1 개임) 목록입니다.

문제의 또 다른 원인은 덮어 쓰는 str 메서드를 사용하여 IP 클래스를 인쇄하는 것과 같습니다.

관련 문제