使用argparse和listcomprehensions的问题

时间:2014-12-22 16:42:26

标签: python argparse pytables

我使用列表推导来查找PyTable中的特定数据集。但是,当尝试与argparser中的参数组合时,它不返回任何值。

以下是代码部分:

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['GRBname']条件中所选row['Scount']的列表。

如果我切换回标准循环结构,我会得到相同的结果,虽然搜索pytable,argparse和list comprehension文档并没有帮助我解决这个特定的问题。

1 个答案:

答案 0 :(得分:3)

您正在将字符串与整数进行比较;这可能在Python 2.7中有效,但数字总是被认为比字符串“更小”(在字符串之前排序)。

如果您希望进行数值比较,也不应该将字符串与字符串进行比较。 '9'大于'10'因为19之前排序(字符串按字典顺序进行比较):

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

argparse询问整数:

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

并将row['Scount']转换为整数,如果它还没有:

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