如何在Python中使用变量作为切片字符串的索引?
我一直在尝试用循环从一个字符串中切出两个字符,但结果只切出了一个。
我试过:
input[i:i+1]
还有
input[i:(i+1)]
但是都没有成功。
我该如何使用变量来进行切片呢?
完整的代码:
def StringTo2ByteList(input):
# converts data string to a byte list, written for ascii input only
rlist = []
for i in range(0, len(input), 2):
rlist.append(input[i:(i+1)])
return rlist
3 个回答
1
从中间位置进行推理在我们从左到右遍历时是有效的:
li = [10, 20, 55, 65, 75, 120, 1000]
print 'forward slicing li[2:5] ->',li[2:5]
# prints forward slicing li[2:5] -> [55, 65, 75]
因为位置2在20和55之间,而位置5在75和120之间。
.
但是当我们从右到左遍历时,这种方法就不管用了:
li = [10, 20, 55, 65, 75, 120, 1000]
print li
print 'reverse slicing li[5:2:-1] ->',li[5:2:-1]
# prints reverse slicing li[5:2:-1] -> [120, 75, 65]
我们必须把li[5 : 2 : -1]理解为:
从元素li[5](也就是120)到未包含的元素li[2](也就是55)
也就是说
从元素li[5](也就是120)只到包含li[3](也就是65)为止。
.
这就导致了从最后开始的反向切片可能会很危险:
li = [10, 20, 55, 65, 75, 120, 1000]
print li[ -1 : 2 : -1 ]
# prints [1000, 120, 75, 65] not [120, 75, 65, 55]
# the same as:
print li[ None : 2 : -1 ]
# prints [1000, 120, 75, 65]
print li[ : 2 : -1 ]
# prints [1000, 120, 75, 65]
而且
li = [10, 20, 55, 65, 75, 120, 1000]
print li[ 4 : 0 : -1]
# prints [75, 65, 55, 20] , not [65, 55, 20, 10]
.
如果觉得这样思考有困难,可以通过写下
print list(reversed(li[2:5]))
# prints [75, 65, 55]
print list(reversed(li[2:-1]))
# prints [120, 75, 65, 55]
print list(reversed(li[0:4]))
# prints [65, 55, 20, 10]
.
来避免错误。请注意,获得反向切片并包含第一个元素的唯一方法是
print li[ 4 : : -1]
这代表着
print li[ 4 : None : -1]
6
记住切片索引的一个好方法是把数字看作是元素之间位置的标签。
比如说,如果你想切片 ba
,你可以用 fruit[0:2]
。这样想的话,就不会觉得很反直觉了,而且你也能轻松避免代码中常见的“多一或少一”的错误。
9
切片的值并不是切片的开始和结束的字符,而是开始和结束的位置。如果你想切出两个元素,那么你的结束位置必须比开始位置大2。
input[i:i+2]