【问题标题】:Python pass slice as argument [duplicate]Python将切片作为参数传递[重复]
【发布时间】:2019-08-12 09:26:10
【问题描述】:

我想将切片传递给函数,以便选择列表的一部分。作为字符串传递更可取,因为我将从用户那里读取所需的切片作为命令行选项。

def select_portion(list_to_slice, slicer):
    return(list_to_slice[slicer])

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
slicer = "1:4"

print(select_portion(numbers, slicer))

我得到以下信息:

TypeError: list indices must be integers or slices, not str

这是可以理解的,但我不知道如何修改它以获得预期的输出:

[1, 2, 3]

【问题讨论】:

    标签: python slice


    【解决方案1】:

    您需要slice 构造函数。在这种情况下,那就是slice(1, 4, None)(对应于1:4:)。

    【讨论】:

      【解决方案2】:

      只需使用slice:

      def select_portion(list_to_slice, slicer):
          return(list_to_slice[slicer])
      
      sl = slice(1, 4, None)
      
      select_portion([1,2,3,4,5], sl)
      

      【讨论】:

      • 这很好,但不允许您将其作为字符串传递?
      • @Sandy 你可以做>>> slice(*(int(x) for x in '1:4'.split(':')]))slice(1, 4, None)。但我不确定,如果这是不赞成的。如果你更喜欢map 而不是list 理解>>> slice(*map(int, x.split(':')))
      • @hansolo 这不是一个好主意...可以忽略任何参数...例如::3:3:-1 甚至只是::: 都是有效的。跨度>
      • @JonClements 是的,我明白了
      猜你喜欢
      • 2016-10-27
      • 2018-08-31
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 2011-04-30
      相关资源
      最近更新 更多