Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将列表中的元素和下一个元素进行比较,如果相同,如何将它们分开?_Python_List - Fatal编程技术网

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='')]))