Python在lis中换行

2024-04-19 02:12:01 发布

您现在位置:Python中文网/ 问答频道 /正文

如果最后一个元素的字符数小于10,那么我可以写一个小于10的元素。否则,请将其单独附加到列表中。我遇到的问题是,如果文本是例如25个字符长。在

例如

l = ["12345678", "123456789"]

>>> a("a", l)
["12345678", "123456789a"]

>>> a("123456789123456789123", l)
["12345678", "1234567891", "2345678912", "3456789123"]

这就是我目前所拥有的

^{pr2}$

Tags: 文本元素列表字符个字符pr2
3条回答

您可以使用正则表达式拆分为10个字符!那会使工作更简单!在

import re
l = ["12345678", "123456789"]
def a(add_str,l):
    add_str= l[-1]+add_Str
    print str

    return l[:-1] + re.findall('.{10}', add_str)+filter(None, re.split(r'.{10}', add_str))

print a("12345987659878", l)

希望有帮助!在

您可以使用以下注释代码:

def wrap(s, l):
    # How many characters to add to last element
    r = 10 - len(l[-1]) if l else 0

    # Augment last string
    if r > 0:
        l[-1] += s[:r]

    # Add remaining chunks of length 10
    for i in range(r, len(s), 10):
        l.append(s[i:i + 10])

    return l

l = ["12345678", "123456789"]

print(wrap("a", l))
print(wrap("123456789123456789123", l))

结果:

^{pr2}$

问题是st(在给定函数中)可以是任意长的,因此您必须添加任意数量的元素。现在,如果某个东西是任意的,通常调用一个循环for或{})。在

算法本身分为两个阶段:在第一阶段,我们检查lst的最后一个元素中还剩下多少空间。我们用st的(一部分)填充该元素。您可以使用:

left = 10-len(lst[-1])
lst[-1] += st[:left]

注意,这里不需要if:如果没有剩余空间,它将不添加字符,而且如果st中的字符太少,则切片将简单地返回一个子字符串。在

现在我们只需要将剩余的字符以10块的形式添加到lst。我们可以写一个for循环,从left开始(因为我们可以省略第一个left个字符),并跳转10个位置,直到到达st环的末尾:

^{pr2}$

很明显我们要做什么:将片st[i:i+10]添加到lst上。因此,我们将for循环转换为:

for i in range(left,len(st),10):
    lst.append(st[i:i+10])

最后我们只需要返回lst。综合起来我们得到:

def a(st, lst):
    # phase 1
    left = 10-len(lst[-1])
    lst[-1] += st[:left]

    #phase 2
    for i in range(left,len(st),10):
        lst.append(st[i:i+10])

    return lst

请注意,此解决方案在给定列表上运行。如果要复制,可以添加一行:

def a(st, lst):
    # make copylst = list(lst)

    # phase 1
    left = 10-len(lst[-1])
    lst[-1] += st[:left]

    #phase 2
    for i in range(left,len(st),10):
        lst.append(st[i:i+10])

    return lst

相关问题 更多 >