欢迎访问宙启技术站
智能推送

利用Python中的zip()函数实现List的聚合

发布时间:2023-06-21 08:29:56

Python中的zip()函数是一个非常方便的函数,它可以将多个序列按照对应位置元素进行聚合,形成一个新的序列。在实际应用中,我们常常需要将多个List按照某种规则进行聚合,这时就可以利用zip()函数来实现。

zip()函数的基本用法如下:

zip(*iterables)

其中,*iterables表示可迭代对象,可以是任意多个。zip()函数会依次从每个可迭代对象中取出一个元素,将它们打包成一个元组,然后将这些元组组成新的序列。如果各个可迭代对象的长度不一致,则返回的聚合序列长度等于最短的可迭代对象的长度。

下面,我们来看一个具体的例子,假设有三个List,分别是用来表示学生姓名、学生年龄和学生身高的:

names = ["Jim", "Tom", "Mary", "John", "Lisa"]

ages = [18, 19, 17, 20, 18]

heights = [175, 182, 165, 168, 170]

现在,我们想要将它们聚合成一个新的List,每个元素为一个元组,表示一个学生的姓名、年龄和身高,就可以使用zip()函数:

students = list(zip(names, ages, heights))

这样,我们就得到了一个新的List,它包括了五个元组,每个元组分别对应一个学生的姓名、年龄和身高。输出结果如下所示:

[('Jim', 18, 175), ('Tom', 19, 182), ('Mary', 17, 165), ('John', 20, 168), ('Lisa', 18, 170)]

除了基本用法之外,zip()函数还有一些其他的用法,例如可以用于将多个List拆分成为多个List、用于求多个List的平均值等等。下面,我们来详细介绍这些用法。

将多个List拆分成为多个List

在某些情况下,我们需要将一个大的List拆分成为多个List,每个List包含原List中相邻的几个元素。例如,我们有一个包含10个元素的List,我们将它拆分成为3个List,每个List包含3个元素和一个包含1个元素的List,代码如下:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

list1, list2, list3, list4 = zip(*[iter(numbers)]*3)

list5 = list(numbers[9:])

print(list1)

print(list2)

print(list3)

print(list4)

print(list5)

输出结果如下所示:

(1, 2, 3)

(4, 5, 6)

(7, 8, 9)

(10,)

[10]

这个例子中,我们首先利用*[iter(numbers)]*3将原List转换成为包含3个迭代器的List,然后再将它们进行zip()函数处理,就可以得到4个新的List。其中,前三个List包含3个元素,即原List中的每3个元素为一组,而第4个List只包含1个元素,即原List中最后一个元素。

需要注意的是,如果原List的长度不是3的倍数,则最后一组元素的数量可能不足3个,这时需要在最后一个List中单独处理。

求多个List的平均值

如果有多个List,我们可以使用zip()函数将它们聚合为一个新的List,在此基础上求各个元素的平均值。例如,我们有3个List,分别表示学生的语文、数学和英语成绩,我们需要求每个学生的平均分,代码如下:

chinese_scores = [90, 85, 95, 70, 80]

math_scores = [80, 75, 90, 85, 80]

english_scores = [85, 90, 80, 85, 75]

averages = [(a+b+c)/3 for a,b,c in zip(chinese_scores, math_scores, english_scores)]

print(averages)

在这个例子中,我们首先利用zip()函数将三个List聚合为一个新的List,然后使用列表推导式计算每个学生的平均分。计算平均分的方式是将三个科目的成绩相加并除以3。

需要注意的是,在实际应用中,可能需要对小数点后位数进行特定的取舍,这时可以使用round()函数来实现。

总结

本文介绍了Python中的zip()函数及其用法,包括将多个List聚合成为一个新的List、将一个List拆分成为多个List、求多个List的平均值等等。zip()函数的应用非常广泛,是Python编程中不可或缺的一部分。在实际应用中,我们可以根据需要选择合适的算法来实现数据的处理,提高数据处理的效率和精度。