Python 如何将列表中的元素和下一个元素进行比较,如果相同,如何将它们分开?
我有一个字符串,其中包含随机字母和数字,但如果有两个字母或数字相同且相邻,则必须使用Python 如何将列表中的元素和下一个元素进行比较,如果相同,如何将它们分开?,python,list,Python,List,我有一个字符串,其中包含随机字母和数字,但如果有两个字母或数字相同且相邻,则必须使用“/”将它们分开。因此,输入字符串是“uBBjkko”,结果应该是“uB/Bjk/ko” 现在,我已将字符串转换为列表,以便将每个元素与下一个元素进行比较: mylist['u','B','B','j','k','k','o'] 对于范围内的i(len(mylist)): 如果mylist[i]==mylist[i+1]: mylist.插入(i+1,“/”) 打印(“.join(mylist)) 但是如果列表
“/”
将它们分开。因此,输入字符串是“uBBjkko”
,结果应该是“uB/Bjk/ko”
现在,我已将字符串转换为列表,以便将每个元素与下一个元素进行比较:
mylist['u','B','B','j','k','k','o']
对于范围内的i(len(mylist)):
如果mylist[i]==mylist[i+1]:
mylist.插入(i+1,“/”)
打印(“.join(mylist))
但是如果列表太长,并且列表以两个相同的字母或数字结尾,例如
['u','B','B','j','k','k','o','2','2']
然后输出将是
“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))
虽然可能有点多,但您可以了解
itertools
模块zip
function或zip\u longest
函数在本例中也是如此,并列出理解情况。首先,这里有一个语法错误:for i in range(len(mylist)):
您错过了最后一个括号;)@LeoE哦,是的,谢谢你,我没有注意到,但很遗憾,它没有解决我的问题:(你所缺少的是+1,它应该是,因为我在范围内(len(mylist)+1):
然后它就工作了;)@LeoE哦,谢谢,它修正了一点,但是如果字符串太长,那么它就不工作了,如果字符串以两个相同的字母结尾:/yes,问题是,在迭代时插入占位符,因此会更改列表的长度。因此,在插入之后,接下来就是,下次您勾选“/”和下一个字母时,如果它解决了您的问题,让其他人知道它是有效的,请接受答案;)欢迎你;)你可以用mylist[:1:-1]
代替范围(len(mylist)-1,0,-1)
@shahkalpesh做什么?因为我没有迭代列表,所以它没有帮助哦,我看到您使用的是基于索引的迭代,而不是对每种字符类型的迭代使用。我道歉。
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='')]))