假设我的变量S
包含字符串 "1:3"
(或者就此而言,"1"
或"1:"
或{{1我想在列表 ":3"
上使用它作为切片说明符。您不能简单地执行L
,因为切片所需的参数是L[S]
。
现在,我目前有一些丑陋的代码将"int:int"
解析为其两个成分S
并处理所有边缘情况(其中4个)以提供正确的切片访问权但这个只是简单的丑陋和unpythonic。
如何优雅地使用字符串int
并将其用作切片说明符?
答案 0 :(得分:5)
使用列表解析可以在没有太多黑客攻击的情况下完成。我们将字符串拆分为:
,将拆分项作为参数传递给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]
答案 1 :(得分:1)