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

标签 python string slice specifier

假设我有一个变量 Sstring "1:3"(或者就此而言,"1",或 "1:"":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]

关于Python:想要使用字符串作为切片说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13324554/

相关文章:

python - 重新运行代码,直到获得特定的输出

python - 从另一个文件导入方法的问题

python - pytest stdout 从测试输出刷新到不同的文件

python - 检查字符串中的字母

python - 如何在 Python 中将列表转换为带有空格的字符串?

c# - 读取程序 c# 的文本文件中的凭据?

c - 为什么 unsigned int 而不是 strlcat 和 strlcpy 的 void?

c - 切片文件字符串

arrays - Scala非连续子数组

string - ResponseWriter.Write 和 io.WriteString 有什么区别?