在 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 中使用变量对列表进行切片的主要内容,如果未能解决你的问题,请参考以下文章