使用字符串参数进行Python列表切片

时间:2016-04-01 11:00:48

标签: python

可以像这样切片python列表:

>>> list=['a', 'b']
>>> list[0:1]
['a']

但是,将索引作为字符串传递时,会引发错误:

>>> index="0:1"
>>> list[index]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str

如何将列表索引指定为字符串? 0:1中的list[0:1]数据类型是什么,真的吗?

4 个答案:

答案 0 :(得分:6)

n:mslice的语法糖。您可以split索引字符串,将其部分转换为整数,然后从中创建slice

>>> lst = list(range(10))
>>> index = "1:4"
>>> s = slice(*map(int, index.split(':')))
>>> lst[s]
[1, 2, 3]

与三个部分的作用相同:

>>> index = "1:9:2"
>>> s = slice(*map(int, index.split(':')))
>>> lst[s]
[1, 3, 5, 7]

如果您想允许“空白”部分,转换会更多地涉及:

>>> index = "::-1"
>>> s = slice(*[int(x) if x else None for x in index.split(':')])
>>> lst[s]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

答案 1 :(得分:1)

为什么不通过拆分:,然后将它们用作切片索引,将切片字符串转换为整数。

list=['a', 'b']
slicer_str = '0:1'
slicer_int = [int(i) for i in slicer_str.split(':')]
print(list[slicer_int[0]:slicer_int[1]])

答案 2 :(得分:1)

您可以使用exec()

l = ['a', 'b']
index="0:1"
exec('print(l[{}])'.format(index))

仅需要打印以查看输出。您可以将其分配给变量,然后再调用该变量。

答案 3 :(得分:0)

在指定起点和终点的地方使用[:],因此可以轻松跟踪要切片的内容