【问题标题】:How to run this function properly?如何正确运行此功能?
【发布时间】:2020-07-03 10:25:00
【问题描述】:

我写了一个函数,它接受字符串并返回两个字符对的列表。如果字符串有奇数个字符,那么它返回最后一个字符和 _ 成对。

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_']

问题是在 b 中插入值时 i 的索引在多个 s 的情况下引用 s 并且我认为所有 s 都是相同的,所以插入中间 s 或预期 s 的索引时,它会放入第一个 s 的索引。

请解释函数中发生了什么以及函数如何正常运行。如果我上面的猜测接近实际问题或接近问题,请告诉我如何在不同的地方处理 s不同。

【问题讨论】:

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


    【解决方案1】:

    我想这会解决你的问题

    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"))
    

    【讨论】:

    • 谢谢老兄,但我们需要x = list(a)b = a。只是问问。
    • 不需要@SamipKarki
    猜你喜欢
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多