【发布时间】: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