我编写了一个接受字符串并返回两个字符对的列表的函数。如果字符串的字符数为奇数,则返回最后一个带有_的字符对。
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 不一样。
答案 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"))