[英]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.