2012-10-22 2 views
1

텍스트 파일에서 도시 목록을 반환하는 함수를 작성하여 함수가 호출 될 때 색인을 배치 할 수 있도록합니다. 해당 도시를 반환합니다.색인을 생성 할 텍스트 파일에서 항목 목록을 반환하십시오.

예 :

citylist('MYFILE.txt')[3] 

는 지금까지 내가

def citylist(filename): 
    assert type(filename)==str 

    with open(filename) as FileObject: 
     for line in FileObject: 
      q=line.split('\t') 
      print q[12], 

500 불만이있다합니다. 각 문자열 (불만 사항)을 목록으로 나눈 후 도시 이름이 목록의 13 번째 색인이됩니다. 그러나 내가 할 수있는 모든 것은 도시 이름의 모든 것을 색인을 생성 할 수없는 비 데이터 유형으로 인쇄하는 것만 큼 막혔습니다. 더 간결

def citylist(filename): 
    assert type(filename)==str #isinstance(filename,str) is more idiomatic here. 

    output = [] 
    with open(filename) as FileObject: 
    for line in FileObject: 
     q = line.split('\t') 
     output.append(q[12]) 
    return output 

을 다른 방법으로, 그리고 :

+0

당신이 "하지만 난 모든으로 붙어에 명확히 할 수 내가 뭘 얻을 수있다 인덱싱 할 수없는 비 데이터 유형 "으로 표시 할 수 있습니까? – pogo

+0

함수는 결과로 무언가를하기 위해 무언가를 반환해야합니다. – kreativitea

+0

특정 유형을 얻는다는 것을 주장하는 것은 파이썬 코드에서 매우 일반적이지 않습니다. 보다 일반적인 사용법은 사용자가 가지고있는 것을 사용하고 발생할 수있는 예외를 처리하는 것입니다. – mgilson

답변

1

당신은 목록을 작성하고 그것을 반환 할 수 나는이 마지막 예에서 list-comprehension를 사용하여 목록을 구축했습니다

def citylist(filename): 
    with open(filename) as f: 
     return [ line.split('\t')[12] for line in f ] 

.

+0

고맙습니다 .. 두 작품 .. 추가하는 것을 잊어 버렸습니다. 후행 공백을 없애고 Q [12]에 스트립 메서드를 추가해야합니다. 다소 실망했습니다.이 새를 여전히 얻을 수는 있었지만 여전히 새답니다. – Joe

+0

@MarcoJ - 아니요. 문제. 걱정하지 마십시오. 계속 작업하면 파이썬으로 작업하는 방식에 익숙해집니다. 행운을 빕니다. – mgilson

0
def citylist(filename): 
    assert isinstance(filename, str) 
    return [line.split('\t')[12] for line in open(filename)] 

목록의 이해는 다음과 같은 확장 for 루프에 해당 : 인쇄는 도시 이름을 모두

result = [] 
for line in open(filename): 
    result.append(line.split('\t')[12]) 
관련 문제