📜  Python|在多列表中对相同索引处的元素进行分组(1)

📅  最后修改于: 2023-12-03 15:04:25.105000             🧑  作者: Mango

Python | 在多列表中对相同索引处的元素进行分组

在编程中,我们经常需要将多个列表中相同索引位置的元素进行分组,以方便后续处理。在 Python 中,实现这一功能非常简单,下面将为大家介绍两种常见的方法。

方法一:使用 zip() 函数

zip() 函数可接受多个可迭代对象作为参数,将它们中对应位置的元素打包成一个元组,返回一个迭代器。

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

for item in zip(list1, list2):
    print(item)

Output:

(1, 'a')
(2, 'b')
(3, 'c')

上述代码中,我们使用 zip() 函数将 list1 和 list2 中相同索引位置的元素打包成了一个元组,并遍历了这个迭代器并输出了每个元组。

基于此,我们可以通过集合 set() 去重和字典 dict() 将元素分组。

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

result = {}
for key, value in zip(list1, list2):
    result.setdefault(key, set()).add(value)

print(result)

Output:

{1: {'a'}, 2: {'b'}, 3: {'c'}}

上述代码中,我们使用 zip() 函数将 list1 和 list2 中相同索引位置的元素打包成了一个元组,并遍历了这个迭代器。对于每个元组,我们将其第一个元素设为字典的 key,将其第二个元素加入一个集合中,并将这个集合设为字典的 value。最终得到了一个字典,其中相同 key 的 value 中包含了相同索引位置的元素。

方法二:使用 zip() 和 defaultdict()

如果不想每次使用 setdefault() 方法,我们可以使用 collections 模块中的 defaultdict() 来替代普通字典,并使其默认值为集合类型。

from collections import defaultdict

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

result = defaultdict(set)
for key, value in zip(list1, list2):
    result[key].add(value)

print(result)

Output:

defaultdict(<class 'set'>, {1: {'a'}, 2: {'b'}, 3: {'c'}})

上述代码中,我们使用 zip() 函数将 list1 和 list2 中相同索引位置的元素打包成了一个元组,并遍历了这个迭代器。对于每个元组,我们将其第一个元素作为 defaultdict 的 key,将其第二个元素加入一个集合中,并将这个集合设为 defaultdict 的 value。最终得到了一个 defaultdict 对象,其中相同 key 的 value 中包含了相同索引位置的元素。

以上就是 Python 中在多列表中对相同索引处的元素进行分组的两种常见方法,希望对大家有所帮助。