对从命令行给出的任意值进行排序

时间:2016-06-02 20:10:29

标签: python sorting floating-point int

我需要能够在命令行中以任何顺序接受任意值(整数,浮点数),然后对它们进行排序和打印。我可以通过整体或只是花车轻松完成,但我仍然坚持尝试阅读两者。我的args阅读显示为Namespace(floats=[6.5], integers=[5, 10, 8, 4])。我需要将所有这些数字放入一个列表中,然后按照排序打印。关于如何处理这个的建议?

我遇到的一个问题是参数必须按照一定的顺序,首先必须是第一个然后是浮点数,但我需要能够以任何顺序输入它们。

作为一个例子。

$ sortNum.py 5 9.9 14 1.1
1.1, 5, 9.9, 14

我的代码如下:

try:
    parser = argparse.ArgumentParser(description='Sort some arbitrary numbers by ascending or descending order')
    parser.add_argument('integers', metavar='N', type=int, nargs='+', help='numbers for the sorter')
    parser.add_argument('floats', metavar='F', type=float, nargs='+', help='floats for the sorter')

    args = parser.parse_args()

    # print the sorted values of user input from cmd line
    print(sorted(args.integers + args.floats))

    # print all the sys argument passed from cmd line including the program name
    print(sys.argv)

except:
    e = sys.exc_info()[0]
    print(e)

我收到此错误: sortNum.py:error:参数N:无效的int值:' 1.1' 当我尝试输入1.1作为我的第二个参数。我使用以下参数进行测试:5 1.1 10 8 4 6.5 数值本身并不重要,只要它们可以是任何浮点数或整数,并且需要进行排序。

1 个答案:

答案 0 :(得分:0)

在python中,你可以通过sys访问参数。只是做:

import sys
print sys.argv 

它应该以正确的顺序显示所有参数,事实是你将在argv列表中有文件名,这是坏的!

所以你可以通过

删除它
numbers = sys.argv[1:]

没有第一个元素的副本。

然后,您可以通过以下代码对元素进行排序:

print sorted(numbers, key=lambda x: float(x))

它的作用是对元素进行排序,但不是考虑元素本身,而是对它们的浮点值进行排序。

然后您的脚本可以这样写:

import sys

print sys.argv
numbers = sys.argv[1:]
print sorted(numbers, key=lambda x: float(x))

我希望它对你有所帮助!