在Python中切片字符串时,如何使用变量作为索引?

2024-04-30 00:53:37 发布

您现在位置: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

Tags: to方法字符串程序forinputdatastring
3条回答

当我们执行从左到右的迭代时,基于中间位置的推理是有效的:

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]

切片值不是切片的开始和结束字符,而是切片的开始和结束点。如果要分割两个元素,则停止必须大于开始。

input[i:i+2]

记住切片索引的一个好方法是将数字看作标记元素之间的位置。

slice example

例如,要分割ba,可以使用fruit[0:2]。当这样想的时候,事情就不再是反直觉的了,你可以很容易地避免代码中的一个错误。

相关问题 更多 >