将argparse与listcomprehensions一起使用时出现的问题

2024-10-01 15:39:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用列表理解来查找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文档在这个特定问题上没有帮助。你知道吗


Tags: 数据in列表foriftableargsrow
1条回答
网友
1楼 · 发布于 2024-10-01 15:39:03

您将字符串与整数进行比较;这在Python2.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]]

相关问题 更多 >

    热门问题