如何正确运行此功能?

时间:2020-07-03 10:25:00

标签: python-3.x list for-loop object

我编写了一个接受字符串并返回两个字符对的列表的函数。如果字符串的字符数为奇数,则返回最后一个带有_的字符对。

def split_pairs(a):
    if a == '':
        return list(a)
    x = list(a)
    if len(x) == 2:
        return [f'{a}']
    if len(x) % 2 != 0:
        x.append('_')
    b = x[:]
    s = ''
    for i in x[1:]:
        if len(x[:x.index(i)]) % 2 == 0:
            b.insert(b.index(i), ',')
    lst = s.join(b)
    z = lst.split(',')
    return z


print(split_pairs("sam"))
print(split_pairs("sa"))
print(split_pairs("samip"))
print(split_pairs("ss"))
print(split_pairs("sss"))
print(split_pairs("ssss"))

该函数在上面三个单词“ sam”,“ sa”,“ samip”下正常工作。但对其他四个单词无效。 输出为:

['sa','mi','p _']

['ss']

['',``,'sss _']

['',``,'','ssss']

['',``,'','sa','masasds _']

问题是,在多个s的情况下,将值b插入到i的索引中,该索引指向 s ,我认为所有 s 都相同,因此插入中间 s 或预期的 s 的索引,它会将前 s 的索引放入。

请说明该函数正在发生什么以及该函数如何正常运行。如果我的上述猜测接近实际问题或接近问题,请告诉我如何在不同的地方对待 s 不一样。

1 个答案:

答案 0 :(得分:0)

我认为这可以解决您的问题

def split_pairs(b):
    if b == '' or len(b) == 2 :
        return [b]
    if len(b) % 2 != 0:
        b+='_'
    return [b[i]+b[i+1] for i in range(0,len(b),2)]
    


print(split_pairs("sam"))
print(split_pairs("sa"))
print(split_pairs("samip"))
print(split_pairs("ss"))
print(split_pairs("sss"))
print(split_pairs("ssss"))