在 Python 中使用变量对列表进行切片

Posted

技术标签:

【中文标题】在 Python 中使用变量对列表进行切片【英文标题】:Slicing a list using a variable, in 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]

但这也不起作用。

这可能吗?

【问题讨论】:

【参考方案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 插在大括号内。它精确地处理通常的以冒号分隔的切片语法,因为它只是按原样插入包含冒号的字符串。

【讨论】:

以上是关于在 Python 中使用变量对列表进行切片的主要内容,如果未能解决你的问题,请参考以下文章

Python:一种使用索引列表对列表进行切片的有效方法

是否可以使用 python 3 对 h5py 中的键进行切片而不形成列表?

python--pandas切片

如何在python中切片元组列表?

根据值或列表的变化对python数据框进行切片

如何使用 .loc 对 DF 进行切片,列表中可能包含在索引/列中找不到的元素