2014-12-22 2 views
0

나는 목록 이해 (list comprehension)를 사용하여 PyTable 내의 특정 데이터 세트를 찾는다. 그러나 argparser에서 인수를 결합하려고 시도하면 아무 값도 반환하지 않습니다.목록 이해와 함께 argparse를 사용할 때의 문제

if args.Scount: 
    print args.Scount, args.Scount[0], args.Scount[1] 

    print 
    print [row['GRBname'] for row in table.iterrows() if args.Scount[0] <= row['SCounts'] <= args.Scount[1]] 
    print 

    print [row['GRBname'] for row in table.iterrows() if 0 <= row['SCounts'] <= 10] 

args.Scount 출처 :

첫 번째 줄 인쇄 :

parser.add_argument("--Scount", nargs=2, help="Used to display GRBs within the specified spectral count range") 

그래서 예를 들어 내가 --Scount 0과 10을 주면 여기

코드의 섹션 ['0', '10'] 0 10 (이것은 args에 값이 있는지 확인하는 테스트 일뿐입니다)

두 번째 줄 인쇄 []

세 번째 줄은 row['Scount'] 조건에서 선택한 row['GRBname']을 포함하는 목록을 인쇄합니다.

표준 루프 구조로 다시 전환하면 pytable, argparse 및 list comprehension 문서를 검색해도이 특정 문제에 도움이되지 않지만 동일한 결과가 나타납니다.

+0

구체적으로 궁금한 점은 무엇입니까? 당신은 당신의 관찰을 고무 시켰지만 무엇을 알고 싶습니까? –

+0

table.iterrows()는 반복자처럼 보이지만 두 번째 호출에서 소모 될 수 있습니까? –

답변

3

문자열을 정수와 비교합니다. 이것은 Python 2.7에서 작동하지만 숫자는 항상 문자열보다 작습니다 (문자열보다 먼저 정렬 됨).

수치 비교가 예상되는 경우 문자열을 문자열과 비교해서는 안됩니다. 1 종류 9 전에 (문자열이 사 전적으로 비교) 때문에 '9'보다 큰 '10'입니다 :

parser.add_argument(
    "--Scount", nargs=2, type=int, 
    help="Used to display GRBs within the specified spectral count range") 

을이를 이미없는 경우도 정수로 row['Scount'] 변환 :

>>> '1' < 9 
False 
>>> '9' < '10' 
False 

정수에 대한 argparse 문의 :

[row['GRBname'] for row in table.iterrows() 
if args.Scount[0] <= int(row['SCounts']) <= args.Scount[1]] 
+0

한숨, 나는 결코 잡히지 않는 어리석은 실수입니다. 유형 추가 = int가 완벽하게 작동했습니다. 감사합니다. –

관련 문제