Python - 在列表

时间:2017-02-26 18:14:36

标签: python string list recursion

我正在尝试编写一个带有一些文本和列表的函数,然后如果列表中的最后一个元素足够小以便它可以将文本追加到最后一个元素并且仍然少于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

3 个答案:

答案 0 :(得分:1)

问题在于st(在您的给定函数中)可以是任意长,因此您必须添加任意数量的元素。现在,如果某些内容是任意的,通常会调用循环forwhile)。

算法本身包含两个阶段:在第一阶段,我们检查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}}