Python 如何根据项目的第一个字符对iterable对象中的项目进行分组?
从一个已排序的iterable对象开始,我需要按项目的第一个字符对项目进行分组(例如,从a到z的每个字母都有一个组,数字和符号也有一个组) 举个更具体的例子,假设我有以下列表: L=['aa','ab','ac','ba','bb','bc','ca','cb','cc','10','a','b',…] 我需要像这样的东西: GL=['aa','ab','ac'],['ba','bb','bc'],['ca','cb','cc'],['10','%a','b']] 这样做的选项是什么,哪一个最有效Python 如何根据项目的第一个字符对iterable对象中的项目进行分组?,python,Python,从一个已排序的iterable对象开始,我需要按项目的第一个字符对项目进行分组(例如,从a到z的每个字母都有一个组,数字和符号也有一个组) 举个更具体的例子,假设我有以下列表: L=['aa','ab','ac','ba','bb','bc','ca','cb','cc','10','a','b',…] 我需要像这样的东西: GL=['aa','ab','ac'],['ba','bb','bc'],['ca','cb','cc'],['10','%a','b']] 这样做的选项是什么,哪一个最有
import itertools as it
L = ['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc', '10', '%a', ' b']
sorter = lambda x: x[0].lower() if x and x[0].isalpha() else '}'
GL = [list(v) for k, v in it.groupby(sorted(L, key=sorter), key=sorter)]
返回:
[['aa', 'ab', 'ac'],
['ba', 'bb', 'bc'],
['ca', 'cb', 'cc'],
['10', '%a', ' b']]
您可以使用其他方法而不是
'}'
将所有非字母字符放置在排序中的正确位置。如果x和x[0],则可能需要。isalpha()list@eumiro当前位置我很清楚我必须使用groupby,但其余的都有点让我不知所措。谢谢你提供了清晰的解决方案