1

我有一个字符串,其中包含随机字母和数字,但如果有两个相同且相邻的字母或数字,则必须用"/". 所以输入字符串是"uBBjkko",结果应该是"uB/Bjk/ko"

现在我已经将我的字符串转换为列表,所以我可以将每个元素与下一个元素进行比较:

mylist ['u', 'B', 'B', 'j', 'k', 'k', 'o']
for i in range(len(mylist)):
        if mylist[i] == mylist[i + 1]:
            mylist.insert(i + 1, "/")
print("".join(mylist))

但是如果列表太长并且列表以两个相同的字母或数字结尾,例如

['u', 'B', 'B', 'j', 'k', 'k', 'o', '2', '2']

那么输出将是"uB/Bjk/ko22",但它需要是"uB/Bjk/ko2/2"

4

2 回答 2

1

所以正如我在评论中所说的,问题是你在迭代时插入。通过从头到尾以另一种方式迭代,您可以修复它。这样您的迭代就不会受到插入的影响:

mylist = ['u', 'B', 'B', 'j', 'k', 'k', 'o', '2', '2']
for i in range(len(mylist)-1, 0, -1): # This goes from len(mylist)-1 to 0 in -1 steps
    if mylist[i] == mylist[i-1]:
        mylist.insert(i, '/')
print("".join(mylist))
于 2019-11-07T14:31:37.783 回答
0
from itertools import zip_longest

mylist = ['u', 'B', 'B', 'j', 'k', 'k', 'o', '2', '2']
print("".join([a + ('/' if a == b else '') for a,b in zip_longest(mylist, mylist[1:], fillvalue='')]))

虽然可能有点多,但您可以了解itertools模块。zip在这种情况下,函数或zip_longest函数以及列表理解也是如此。

于 2019-11-07T14:51:01.143 回答