我使用列表推导来查找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文档并没有帮助我解决这个特定的问题。
答案 0 :(得分:3)
您正在将字符串与整数进行比较;这可能在Python 2.7中有效,但数字总是被认为比字符串“更小”(在字符串之前排序)。
如果您希望进行数值比较,也不应该将字符串与字符串进行比较。 '9'
大于'10'
因为1
在9
之前排序(字符串按字典顺序进行比较):
>>> '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]]