繁体   English   中英

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

[英]How to compare element in list with the next element and separate if same?

我有一个字符串,其中包含随机字母和数字,但如果有两个相同且彼此相邻的字母或数字,则必须用"/"分隔它们。 所以输入字符串是"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']

那么 output 将是"uB/Bjk/ko22"但它需要是"uB/Bjk/ko2/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 function 或zip_longest function 在这种情况下和列表理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM