Passing integer lists to python

后端 未结 6 641
感情败类
感情败类 2021-01-07 19:23

I want to pass 2 lists of integers as input to a python program.

For e.g, (from command line)

python test.py --a 1 2 3 4 5 -b 1 2  
6条回答
  •  伪装坚强ぢ
    2021-01-07 20:16

    argparse supports nargs parameter, which tells you how many parameters it eats. When nargs="+" it accepts one or more parameters, so you can pass -b 1 2 3 4 and it will be assigned as a list to b argument

    # args.py
    import argparse
    
    p = argparse.ArgumentParser()
    
    # accept two lists of arguments
    # like -a 1 2 3 4 -b 1 2 3
    p.add_argument('-a', nargs="+", type=int)
    p.add_argument('-b', nargs="+", type=int)
    args = p.parse_args()
    
    # check if input is valid
    set_a = set(args.a)
    set_b = set(args.b)
    
    # check if "a" is in proper range.
    if len(set_a - set(range(1, 51))) > 0: # can use also min(a)>=1 and max(a)<=50
        raise Exception("set a not in range [1,50]")
    
    # check if "b" is in "a"
    if len(set_b - set_a) > 0:
        raise Exception("set b not entirely in set a")
    
    # you could even skip len(...) and leave just operations on sets
    # ...
    

    So you can run:

    $ python arg.py  -a 1 2 3 4 -b 2 20
    Exception: set b not entirely in set a
    
    $ python arg.py  -a 1 2 3 4 60 -b 2
    Exception: set a not in range [1,50]
    

    And this is valid:

    $ python arg.py  -a 1 2 3 4 -b 2 3
    

提交回复
热议问题