Python:想要使用字符串作为切片说明符

时间:2012-11-10 17:53:52

标签: python string slice specifier

假设我的变量S包含字符串 "1:3"(或者就此而言,"1""1:"或{{1我想在列表 ":3"上使用它作为切片说明符。您不能简单地执行L,因为切片所需的参数是L[S]

现在,我目前有一些丑陋的代码将"int:int"解析为其两个成分S并处理所有边缘情况(其中4个)以提供正确的切片访问权但这个只是简单的丑陋和unpythonic。

如何优雅地使用字符串int并将其用作切片说明符?

2 个答案:

答案 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)

这是另一种解决方案

eval("L[%s]" % S) 

警告 - It's not safe如果S来自外部(不可靠)来源。