假设我有一个像
这样的字符串mystr = 'ABCDEFGHIJKLMNOPQRSTYWXYZ'
假设我想创建一个包含5个字符的子串,那么可能的答案是
for i in range(len(mystr)):
tmp = mystr[i-2:i+3];
sub_str.append(tmp)
另一个案例是: 如果我需要为特定条件创建子串,例如:
,该怎么办?for i in range(len(mystr)):
if mystr[i] == 'L':
tmp = mystr[i-2:i+3]
sub_str.append(tmp)
这很容易,但我想要另一种出路,那就是我不想以任何形式使用索引方法(如mystr [i-2:i + 3])。有可能吗?
答案 0 :(得分:0)
您应该使用step
参数来使用递增5的索引,该索引作为第3个参数传递到range()
内置函数中(在start
和{{1之后) }})。
因此,在这种情况下,您的第一个stop
循环将如下所示:
for
对于第二个for i in range(0, len(mystr), 5):
tmp = mystr[i:i+5] # changed from i-2:i+3
sub_str.append(tmp)
循环,再次从0开始并从for
更改切片(并更新[i-2:i+3]
条件中的字符索引,使其行为与原始循环相同):
表示范围内的i(0,len(mystr),5): 如果mystr [i + 2] =='L': tmp = mystr [i:i + 5] sub_str.append(TMP)
我认为没有索引就可以切片。
答案 1 :(得分:0)
在条件的情况下,如果您不想在代码中使用for
循环,则可以使用string.find()
方法。您的代码将如下所示:
substr_start = my_str.find("L") - 2
substr.append(my_str[substr_start:substr_start+5])
请记住,string.find
方法只返回子字符串出现的第一个索引。