我有一个列表:
my_list = [6, 9, 12]
我有一个字符串:
my_string = "The quick brown fox jumps over the lazy dog."
我想这样切成字符串:
my_string[:6]
my_string[6:9]
my_string[9:12]
my_string[12:]
请注意,切片范围是my_list的元素。
输出:
The qu
ick
br
own fox jumps over the lazy dog.
或进入列表。但是,我正在努力进行切片的算法。
答案 0 :(得分:2)
使用zip
并切片。通过应用my_list
和slice之前在开头添加0来修改zip
:
my_list = [6, 9, 12]
my_string = "The quick brown fox jumps over the lazy dog."
my_list = [0] + my_list
for x, y in zip(my_list, my_list[1:]):
print(my_string[x: y])
print(my_string[my_list[-1]:])
# The qu
# ick
# br
# own fox jumps over the lazy dog.
或者更确切地说,如果出于某些原因需要更改my_list
,请在此处使用单独的变量:my_list1 = [0] + my_list
和for x, y in zip(my_list1, my_list1[1:]):
。
答案 1 :(得分:2)
我的解决方案
L=[0]+my_list+[len(my_string)]
for a in range(len(L)-1):
print(my_string[L[a]:L[a+1]])
答案 2 :(得分:1)
my_list = [6, 9, 12]
my_string = "The quick brown fox jumps over the lazy dog."
start = 0
for end in my_list:
print(my_string[start:end])
start = end
print(my_string[end:])
为我工作...
答案 3 :(得分:0)
这根据所需的输出进行了
my_list = [6, 9, 12]
my_string = "The quick brown fox jumps over the lazy dog."
resultstring = ''
temp = 0
for i in range(0,len(my_list)):
resultstring+=my_string[temp:my_list[i]]
resultstring+='\n'
temp = my_list[i]
resultstring+=my_string[temp:]
print resultstring
输出:
The qu
ick
br
own fox jumps over the lazy dog.
答案 4 :(得分:0)
您可以编写一个返回生成器的函数,以在需要显示结果的任何地方使用。
def slice_string_by(my_string, my_list):
memo = 0
for idx in my_list:
size = idx - memo
chunck = my_string[0:size]
yield chunck
my_string = my_string[size:]
memo = idx
yield my_string
res = slice_string_by(my_string, my_list)
结果是生成器,转换为您得到的列表:
list(res) #=> ['The qu', 'ick', ' br', 'own fox jumps over the lazy dog.']
for chunk in slice_string_by(my_string, my_list):
print(chunk)
# The qu
# ick
# br
# own fox jumps over the lazy dog.