Python – 不区分大小写的字符串分组
有时,我们有一个用例,我们需要按各种因素(如首字母或任何其他因素)对字符串进行分组。这些类型的问题是数据库查询的典型问题,因此可能在编程时发生在 Web 开发中。本文重点介绍一种不区分大小写的分组,即将所有相同但大小写不同的字符串分组。让我们讨论可以执行此操作的某些方式。
方法 #1:使用next()
+ lambda + 循环
以上3个函数的组合用于以朴素的方法解决这个特定问题。 lambda函数执行查找相似案例的任务,next函数有助于前向迭代。
# Python3 code to demonstrate
# Case Insensitive Strings Grouping
# using next() + lambda + loop
# initializing list
test_list = ['man', 'a', 'gEek', 'for', 'GEEK', 'FoR']
# printing original list
print("The original list : " + str(test_list))
# using next() + lambda + loop
# Case Insensitive Strings Grouping
util_func = lambda x, y: str.lower(x) == str.lower(y)
res = []
for sub in test_list:
ele = next((x for x in res if util_func(sub, x[0])), [])
if ele == []:
res.append(ele)
ele.append(sub)
# print result
print("The list after Categorization : " + str(res))
输出 :
The original list : ['man', 'a', 'gEek', 'for', 'GEEK', 'FoR']
The list after Categorization : [['man'], ['a'], ['gEek', 'GEEK'], ['for', 'FoR']]
方法 #2:使用sorted() + groupby()
这个特定的任务也可以使用 groupby函数来解决,它提供了一种传统的方法来解决这个问题。 sorted函数按大小对元素进行排序,以提供给 groupby 以进行相关分组。
# Python3 code to demonstrate
# Case Insensitive Strings Grouping
# using sorted() + groupby()
from itertools import groupby
# initializing list
test_list = ['man', 'a', 'gEek', 'for', 'GEEK', 'FoR']
# printing original list
print("The original list : " + str(test_list))
# using sorted() + groupby()
# Case Insensitive Strings Grouping
util_func = lambda x: str.lower(x)
temp = sorted(test_list, key = util_func)
res = [list(ele) for i, ele in groupby(temp, util_func)]
# print result
print("The list after Categorization : " + str(res))
输出 :
The original list : ['man', 'a', 'gEek', 'for', 'GEEK', 'FoR']
The list after Categorization : [['man'], ['a'], ['gEek', 'GEEK'], ['for', 'FoR']]