Python 中的二进制元素列表分组
pythonserver side programmingprogramming
假设我们有一个列表列表,其中每个子列表都有两个元素。每个子列表的一个元素在列表中的许多其他主题中是共同的。我们需要创建一个最终列表,该列表将显示按共同元素分组的子列表。
使用 set 和 map
在给定列表中,第一个元素是字符串,第二个元素是数字。因此,我们创建一个临时列表,它将保存每个子列表的第二个元素。然后我们将子列表与临时列表中的每个元素进行比较,然后设计器按照这些元素对它们进行分组。
示例
listA = [['Mon', 2], ['Tue', 3], ['Wed', 3], ["Thu", 1], ['Fri', 2], ['Sat', 3], ['Sun', 1]] # 使用集合和映射 temp = set(map(lambda i: i[1], listA)) res = [[j[0] for j in listA if j[1] == i] for i in temp] # 结果 print("The list with grouped elements is : \n" ,res)
输出
运行上述代码得到以下结果 −
The list with grouped elements is : [['Thu', 'Sun'], ['Mon', 'Fri'], ['Tue', 'Wed', 'Sat']]
使用 groupby 和 itemgetter
itemgetter 函数用于获取每个子列表的第二个元素。然后根据 itemgetter 函数的结果应用 group by 函数。
示例
from itertools import groupby from operator import itemgetter listA = [['Mon', 2], ['Tue', 3], ['Wed', 3],["Thu", 1], ['Fri', 2], ['Sat', 3],['Sun', 1]] # 使用 groupby listA.sort(key = itemgetter(1)) groups = groupby(listA, itemgetter(1)) res = [[i[0] for i in val] for (key, val) in groups] # 结果 print("The list with grouped elements is : \n" ,res)
输出
运行上述代码得到以下结果 −
The list with grouped elements is : [['Thu', 'Sun'], ['Mon', 'Fri'], ['Tue', 'Wed', 'Sat']]
使用 defaultdict
我们应用 defaultdict 函数来获取子列表的第二个元素作为字典的键。然后在结果列表中,我们将子列表的第一个元素的值附加到结果列表中。
示例
import collections listA = [['Mon', 2], ['Tue', 3], ['Wed', 3],["Thu", 1], ['Fri', 2], ['Sat', 3],['Sun', 1]] # 使用 defaultdict res = collections.defaultdict(list) for val in listA: res[val[1]].append(val[0]) # 结果 print("The list with grouped elements is : \n" ,res)
输出
运行上述代码得到以下结果 −
The list with grouped elements is : defaultdict(<class 'list'>, {2: ['Mon', 'Fri'], 3: ['Tue', 'Wed', 'Sat'], 1: ['Thu', 'Sun']})