假设我有一个S
带有字符串 "1:3"
的变量(或者就此而言,"1"
, or "1:"
or ":3"
),并且我想将它用作list L
上的切片说明符。您不能简单地这样做,L[S]
因为切片所需的参数是"int:int"
.
现在,我目前有一些丑陋的代码可以解析S
为它的两个组成部分int
,并处理所有边缘情况(其中 4 个)以提出正确的切片访问,但这只是丑陋且不符合 Python 标准。
如何优雅地获取字符串S
并将其用作我的切片说明符?
这可以通过使用列表理解来完成,而无需太多黑客攻击。我们在 上拆分字符串:
,将拆分项作为参数传递给slice()
内置函数。这使我们能够很好地在一行中生成切片,以一种适用于我能想到的每种情况的方式:
slice(*[int(i.strip()) if i else None for i in string_slice.split(":")])
通过使用slice()
内置函数,我们巧妙地避免了自己处理太多的边缘情况。
示例用法:
>>> some_list = [1, 2, 3]
>>> string_slice = ":2"
>>> some_list[slice(*[int(i.strip()) if i else None for i in string_slice.split(":")])]
[1, 2]
>>> string_slice = "::-1"
>>> some_list[slice(*[int(i.strip()) if i else None for i in string_slice.split(":")])]
[3, 2, 1]