📜  Python|对列表中的相似子字符串进行分组

📅  最后修改于: 2022-05-13 01:54:25.369000             🧑  作者: Mango

Python|对列表中的相似子字符串进行分组

有时我们有一个应用程序,我们需要将公共前缀字符串分组为一个,以便可以根据分组进行进一步的处理。这种类型的分组在机器学习和 Web 开发的情况下很有用。让我们讨论一些可以做到这一点的方法。
方法#1:使用 lambda + itertools.groupby() + split()
以上三个功能的组合帮助我们完成了任务。 split 方法是关键,因为它定义了必须执行分组的分隔符。 groupby函数对元素进行分组。

Python3
# Python3 code to demonstrate
# group similar substrings
# using lambda + itertools.groupby() + split()
from itertools import groupby
 
# initializing list
test_list = ['geek_1', 'coder_2', 'geek_4', 'coder_3', 'pro_3']
 
# sort list
# essential for grouping
test_list.sort()
 
# printing the original list
print ("The original list is : " + str(test_list))
 
# using lambda + itertools.groupby() + split()
# group similar substrings
res = [list(i) for j, i in groupby(test_list,
                  lambda a: a.split('_')[0])]
 
# printing result
print ("The grouped list is : " + str(res))


Python3
# Python3 code to demonstrate
# group similar substrings
# using lambda + itertools.groupby() + partition()
from itertools import groupby
 
# initializing list
test_list = ['geek_1', 'coder_2', 'geek_4', 'coder_3', 'pro_3']
 
# sort list
# essential for grouping
test_list.sort()
 
# printing the original list
print ("The original list is : " + str(test_list))
 
# using lambda + itertools.groupby() + partition()
# group similar substrings
res = [list(i) for j, i in groupby(test_list,
              lambda a: a.partition('_')[0])]
 
# printing result
print ("The grouped list is : " + str(res))


输出 :

原始列表是:['coder_2', 'coder_3', 'geek_1', 'geek_4', 'pro_3']
分组列表为:[['coder_2', 'coder_3'], ['geek_1', 'geek_4'], ['pro_3']]


方法#2:使用 lambda + itertools.groupby() + partition()
也可以用分区函数代替分割函数来执行类似的任务。这是执行此任务的更有效方式,因为它使用迭代器,因此在内部更快。

Python3

# Python3 code to demonstrate
# group similar substrings
# using lambda + itertools.groupby() + partition()
from itertools import groupby
 
# initializing list
test_list = ['geek_1', 'coder_2', 'geek_4', 'coder_3', 'pro_3']
 
# sort list
# essential for grouping
test_list.sort()
 
# printing the original list
print ("The original list is : " + str(test_list))
 
# using lambda + itertools.groupby() + partition()
# group similar substrings
res = [list(i) for j, i in groupby(test_list,
              lambda a: a.partition('_')[0])]
 
# printing result
print ("The grouped list is : " + str(res))
输出 :

原始列表是:['coder_2', 'coder_3', 'geek_1', 'geek_4', 'pro_3']
分组列表为:[['coder_2', 'coder_3'], ['geek_1', 'geek_4'], ['pro_3']]