如何在列表中组合相似的字符?

Gre*_*reg 10 python

我正在尝试组合列表中彼此相邻的相似字符.我想知道是否有Python方法可以做到这一点?这是一个例子:

test = 'hello###_world###test#test123##'
splitter = re.split("(#)", test)
splitter = filter(None, splitter)
Run Code Online (Sandbox Code Playgroud)

这在splitter变量中返回:

['hello', '#', '#', '#', '_world', '#', '#', '#', 'test', '#', 'test123', '#', '#']
Run Code Online (Sandbox Code Playgroud)

我正在尝试组合哈希,所以列表变成了这样:

['hello', '###', '_world', '###', 'test', '#', 'test123', '##']
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

小智 9

尝试:

splitter = re.split("(#+)", test)
Run Code Online (Sandbox Code Playgroud)

  • @AkshayNevrekar使用`splitter = filter(None,splitter)`(如原始帖子中所示),它没有. (3认同)

Aja*_*234 6

你可以使用itertools.groupby:

import itertools
test = 'hello###_world###test#test123##'
new_result = [''.join(b) for _, b in itertools.groupby(test, key=lambda x:x == '#')]
Run Code Online (Sandbox Code Playgroud)

输出:

['hello', '###', '_world', '###', 'test', '#', 'test123', '##']
Run Code Online (Sandbox Code Playgroud)

您还可以使用re.findall:

import re
result = re.findall('#+|[^#]+', test)
Run Code Online (Sandbox Code Playgroud)

输出:

['hello', '###', '_world', '###', 'test', '#', 'test123', '##']
Run Code Online (Sandbox Code Playgroud)