我正在尝试编写一个带有一些文本和列表的函数,然后如果列表中的最后一个元素足够小以便它可以将文本追加到最后一个元素并且仍然少于10个字符,那么它。否则,将其单独附加到列表中。我遇到的问题是,如果文本例如是25个字符长。
例如,
l = ["12345678", "123456789"]
>>> a("a", l)
["12345678", "123456789a"]
>>> a("123456789123456789123", l)
["12345678", "1234567891", "2345678912", "3456789123"]
这是我到目前为止所拥有的
def a(st, lst):
last = 10 - len(lst[-1])
if last < len(st):
lst[-1] += st[:last]
lst.append(st[last:])
else:
lst[-1] += st
答案 0 :(得分:1)
问题在于st
(在您的给定函数中)可以是任意长,因此您必须添加任意数量的元素。现在,如果某些内容是任意的,通常会调用循环(for
或while
)。
算法本身包含两个阶段:在第一阶段,我们检查lst
的最后一个元素剩余多少空间。我们用({1}}的一部分填充该元素。你可以这样做:
st
请注意,此处不需要left = 10-len(lst[-1])
lst[-1] += st[:left]
:如果没有剩余空格,则不会添加任何字符,此外如果if
中的字符太少,切片将只返回一个子串。
现在我们只需要将剩下的10个块中的字符添加到st
。我们可以通过编写一个以lst
开头的for
循环(因为我们可以省略第一个left
个字符)并跳过10个位置直到它到达{{{{ 1}}环
left
我们必须做的很清楚:将切片st
添加到for i in range(left,len(st),10):
# ... do something
pass
。所以我们将st[i:i+10]
循环转换为:
lst
最后我们只需返回for
。总而言之,我们得到了:
for i in range(left,len(st),10):
lst.append(st[i:i+10])
请注意,此解决方案在给定列表上运行。如果您想制作副本,可以添加一行:
lst
答案 1 :(得分:1)
您可以使用正则表达式分割10个字符!这样可以简化工作!
readonly
希望它有所帮助!
答案 2 :(得分:1)
您可以使用以下注释代码:
['12345678', '123456789a']
['12345678', '123456789a', '1234567891', '2345678912', '3']
结果:
{{1}}