可以像这样切片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]
数据类型是什么,真的吗?
答案 0 :(得分:6)
n:m
是slice
的语法糖。您可以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)
在指定起点和终点的地方使用[:],因此可以轻松跟踪要切片的内容