2016-07-20 5 views
0

Python에서 DropWhile을 사용하여 실습 중이며 충돌이 발생했습니다. 예를 들어DropWhile 두 개의 특정 라인 사이에서 추출합니다.

이 파일에 라인 인 경우

Test1 
Test2 
Test3 
Test4 
Test5 
Test6 
Test7 
Test8 
Test9 
Test10 

은 내가 Test5과 TEST8 사이의 줄을 당겨 싶다.

다른 방법 (파일의 줄을 ... 줄의 마지막 줄을 가져 오는 중 ... 줄이 5면 .... 줄 경우 < 8 ... 인쇄); 하지만 특별히 DropWhile을 사용하여 연습하고 싶습니다.

나는이 몇 가지 방법을 시도했지만 난 일하러 수없는 것 :

예를

dataset = open(sys.argv[1]).readlines() 
def print_out(line): 
    if int(line.strip()[-1]) > 5: 
     if int(line.strip()[-1]) < 8: 
      return True 
     else: 
      return False 

for line in dropwhile(lambda line: print_out(line) == True, dataset): 
    print line.strip() 

이 작동하지 않는 모든 라인이 인쇄되어 있습니다.

내가 별도의 기능을 사용하는 대신 dropwhile 라인에서 오랜 람다 표현식을 사용하려고했으나 또 다른 방법 I는 다음과 같이했을 때 : 나는 단 하나 개의 표현이있는 경우

for line in dropwhile(lambda line: 5 < int(line.strip()[-1]) < 8, dataset): 

이 코드는 작동을 (즉 int (line.strip() [- 1])> 5 또는 int (line.strip() [- 1]) < 8입니다.

내 테스트 데이터 세트에서 Test5와 Test8 사이의 줄을 빼내기 위해 누군가 DropWhile을 사용하여 나를 파이썬 적 방식으로 보여줄 수 있는지 궁금합니다.

답변

2

DropWhile 당신이 사용해야하는 기능 aproach에서 필요없는 필터 :

filter(lambda line: 5 < int(line.strip()[-1]) < 8, dataset) 
조건이 한 번에 도달하면 목록의 나머지가 계속 있도록 DropWhile이 중지됩니다

당신이 당신의 데이터 세트에 dropwhile()를 사용하려는 경우 한 번 값은 다음 당신은 또한 다음과 같이 takewhile()의 사용이 필요 라인을 잡아해야, Test6

+1

다른 방법으로는 생성기 표현식에 대해 다음을 반복합니다. for line inst (line.strip() [- 8] :' – jedwards

0

에 도달 :

from itertools import takewhile, dropwhile 


for line in takewhile(lambda x: int(x.strip()[-1]) < 8, dropwhile(lambda x: int(x.strip()[-1]) <= 5, dataset)): 
    print line.strip() 

이 당신을 줄 것이다 :

Test6 
Test7 

그래서 먼저 필요한 시점까지 각 행을 포기하고 만있는이 완료 포인트, 필요한 끝 지점까지 라인을 가지고, 두 단계로 작동합니다.

관련 문제