【问题标题】:Slicing a list using a variable, in Python在 Python 中使用变量对列表进行切片
【发布时间】:2012-05-21 08:33:01
【问题描述】:

给定一个列表

a = range(10)

您可以使用诸如

之类的语句对其进行切片
a[1]
a[2:4]

但是,我想根据代码中其他地方设置的变量来执行此操作。我可以很容易地为第一个做到这一点

i = 1
a[i]

但是我该如何为另一个人做到这一点?我尝试使用列表进行索引:

i = [2, 3, 4]
a[i]

但这不起作用。我也尝试过使用字符串:

i = "2:4"
a[i]

但这也不起作用。

这可能吗?

【问题讨论】:

    标签: python list slice


    【解决方案1】:

    这就是slice() 的用途:

    a = range(10)
    s = slice(2,4)
    print a[s]
    

    这与使用a[2:4] 相同。

    【讨论】:

      【解决方案2】:

      为什么它必须是单个变量?只需使用两个变量:

      i, j = 2, 4
      a[i:j]
      

      如果它真的需要是一个单一的变量,你可以使用一个元组。

      【讨论】:

      • 我的用例涉及到一些详细的 html 解析,试图找到这个 html 表中的最后一个元素。代码看起来像last_row = list(reversed(parsed_html_rows[-2:-1])) 在代码审查中,我们意识到我在代码中有许多这样的“神奇范围”,用于提取各种东西。给他们起个名字让我和审稿人更容易..last_row_indices = slice(-2, -1)last_row = list(reversed(rows[last_row_indices])) # no more wtf'ing about why -2:-1
      【解决方案3】:

      通过下面的分配,您仍然使用您展示的相同类型的切片操作,但现在使用变量作为值。

      a = range(10)
      i = 2
      j = 4
      

      然后

      print a[i:j]
      [2, 3]
      

      【讨论】:

        【解决方案4】:
        >>> a=range(10)
        >>> i=[2,3,4]
        
        >>> a[i[0]:i[-1]]
        range(2, 4)
        
        >>> list(a[i[0]:i[-1]])
        [2, 3]
        

        【讨论】:

          【解决方案5】:

          我最近遇到了这个问题,同时查找如何让用户通过命令行上传递的参数来模仿a:b:c::c 等常用的切片语法。

          参数被读取为字符串,我宁愿不拆分':',将其传递给slice()等。此外,如果用户传递一个单个整数@987654327 @,本意显然是a[i]。不过,slice(i) 将默认为 slice(None,i,None),这不是我们想要的结果。

          无论如何,我能想到的最直接的解决方案是将字符串作为变量st 读入,然后将所需的列表切片恢复为eval(f"a[{st}]")

          这使用了eval() 内置函数和f-string,其中st 插在大括号内。它精确地处理通常的以冒号分隔的切片语法,因为它只是按原样插入包含冒号的字符串。

          【讨论】:

            猜你喜欢
            • 2020-08-27
            • 1970-01-01
            • 2020-09-14
            • 1970-01-01
            • 2015-06-14
            • 2017-01-29
            • 2019-03-17
            • 1970-01-01
            相关资源
            最近更新 更多