如何将列表中的元素与下一个元素进行比较,如果相同,则进行分隔?

2024-09-29 21:51:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,它包含随机的字母和数字,但是如果有两个字母或数字是相同的并且相邻,那么你必须用"/"来分隔它们。所以输入字符串是"uBBjkko",结果应该是"uB/Bjk/ko"。你知道吗

现在,我已将字符串转换为list,以便将每个元素与下一个元素进行比较:

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"。你知道吗


Tags: 字符串in元素列表forlen字母range
2条回答

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

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))
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函数。你知道吗

相关问题 更多 >

    热门问题