【问题标题】:a pythonic way of getting the range of a list that defined in the parameter?一种获取参数中定义的列表范围的pythonic方法?
【发布时间】:2023-02-13 01:47:12
【问题描述】:

我强制开始索引等于结束索引来获取整个列表,但它不够灵活,我想知道是否有更直观/pythonic 或更好的方法来定义此类函数?

@click.command()
@click.option("-r", "--range", nargs=2, type=int, help="the start & end index")
def main(range):
    start, end = range
    elements = all_elements[start-1:] if start==end else all_elements[start-1:end]

编辑:我将代码从 elements = all_elements 更改为 elements = all_elements[start-1:],这样当调用 python main.py 1 100 时,将返回前 100 个项目,python main.py 5 5 返回第 5 个项目的所有项目。

【问题讨论】:

  • 很好,几个月后没有人抱怨这个丑陋的解决方案;)

标签: python python-3.x python-click


【解决方案1】:

您可以通过为结束参数使用默认值来使您的代码更加灵活。您可以将它设置为 all_elements 的长度,这样如果只提供一个值,它将选择从该索引开始的所有元素:

@click.command()
@click.option("-r", "--range", nargs=2, type=int, help="the start & end index")
def main(range):
    start, end = range
    end = len(all_elements) if end is None else end
    elements = all_elements[start-1:end]

或者,您也可以提供 --all 选项来选择所有元素:

@click.command()
@click.option("-r", "--range", nargs=2, type=int, help="the start & end index")
@click.option("-a", "--all", is_flag=True, help="select all elements")
def main(range, all):
    if all:
        elements = all_elements
    else:
        start, end = range
        end = len(all_elements) if end is None else end
        elements = all_elements[start-1:end]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2017-11-17
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多