Python列表合并的6种方法分享,下面我共列举了6中合并列表的方法,在单个或者少量(3个内?)我们可以直接使用运算符+或者+=或者extend就可以轻松的实现合并,如果列表数量太多,可以考虑使用chain,详细的介绍和示例代码大家往下看吧。
准备数据
首先我们准备三个列表作为测试学习使用数据,下面的代码中不在重复。
# 以三个全是名字元素的列表作为测试数据
name_list_1 = ['Brittany Diaz', 'Miranda Calderon', 'Megan Cowan', 'Kimberly Thompson', 'Laura Smith']
name_list_2 = ['Jonathan Lyons', 'Jeffrey Perez', 'Robert Faulkner', 'Charles Hinton', 'Annette Smith']
name_list_3 = ['Karen Martin', 'Jasmine Gonzalez', 'Maria Marsh', 'Elizabeth Williams', 'Larry Hayes']
使用运算符
+ 号运算符
all_name_list = name_list_1 + name_list_2 + name_list_3
print(all_name_list)
输出结果
['Brittany Diaz', 'Miranda Calderon', 'Megan Cowan', 'Kimberly Thompson', 'Laura Smith', 'Jonathan Lyons', 'Jeffrey Perez', 'Robert Faulkner', 'Charles Hinton', 'Annette Smith', 'Karen Martin', 'Jasmine Gonzalez', 'Maria Marsh', 'Elizabeth Williams', 'Larry Hayes']
+= 号运算符
name_list_1 += name_list_2
print(name_list_1)
输出结果
['Brittany Diaz', 'Miranda Calderon', 'Megan Cowan', 'Kimberly Thompson', 'Laura Smith', 'Jonathan Lyons', 'Jeffrey Perez', 'Robert Faulkner', 'Charles Hinton', 'Annette Smith']
使用 * 号合并
使用 *
号对列表进行解包合并…这种方式我觉得和+
号差不多,我还多写了个 ,
号。哈哈哈哈。
all_name_list = [*name_list_1, *name_list_2,*name_list_3]
print(all_name_list)
输出结果
['Brittany Diaz', 'Miranda Calderon', 'Megan Cowan', 'Kimberly Thompson', 'Laura Smith', 'Jonathan Lyons', 'Jeffrey Perez', 'Robert Faulkner', 'Charles Hinton', 'Annette Smith', 'Karen Martin', 'Jasmine Gonzalez', 'Maria Marsh', 'Elizabeth Williams', 'Larry Hayes']
extend方法
extend 方法可以接受一个可迭代对象(如列表、元组、集合、字符串等),并将该对象中的所有元素添加到当前列表中。
name_list_1.extend(name_list_2)
print(name_list_1)
输出结果
['Brittany Diaz', 'Miranda Calderon', 'Megan Cowan', 'Kimberly Thompson', 'Laura Smith', 'Jonathan Lyons', 'Jeffrey Perez', 'Robert Faulkner', 'Charles Hinton', 'Annette Smith']
前面提到extend 方法可以接受一个可迭代对象并将可迭代对象中的所有元素添加到当前列表中。意味着其他类型也可以直接使用extend 方法:
# 字典
age_info_dict = {
'name': 'Brittany Diaz',
'age': 22
}
name_list_1.extend(age_info_dict)
print(name_list_1)
# 字符串
abcdef_str = 'abcdef'
name_list_1.extend(abcdef_str)
print(name_list_1)
输出结果
['Brittany Diaz', 'Miranda Calderon', 'Megan Cowan', 'Kimberly Thompson', 'Laura Smith', 'name', 'age']
['Brittany Diaz', 'Miranda Calderon', 'Megan Cowan', 'Kimberly Thompson', 'Laura Smith', 'name', 'age', 'a', 'b', 'c', 'd', 'e', 'f']
append方法
顺便提一句,如果你使用append(),会将整个列表放进去,而不是列表中的元素单独放进去,也算是”合并”了。
name_list_1.append(name_list_2)
print(name_list_1)
输出结果
['Brittany Diaz', 'Miranda Calderon', 'Megan Cowan', 'Kimberly Thompson', 'Laura Smith', ['Jonathan Lyons', 'Jeffrey Perez', 'Robert Faulkner', 'Charles Hinton', 'Annette Smith']]
合并多个列表推荐 chain方法
在上面给出的方法中,extend是不可以直接添加多个列表的,而使用太多的 + 号,似乎不够优雅,在合并单个或者3个以内的列表时候我觉得还好,如果列表数量多了我们可以使用Python标准库中的itertools.chain。详细的介绍请你看官方文档:
这里我复制一下官方的解释:
创建一个迭代器,它首先返回第一个可迭代对象中所有元素,接着返回下一个可迭代对象中所有元素,直到耗尽所有可迭代对象中的元素。可将多个序列处理为单个序列。大致相当于:
def chain(*iterables):
# chain('ABC', 'DEF') → A B C D E F
for iterable in iterables:
yield from iterable
chain合并多个列表示例
from itertools import chain
all_name_list = chain(name_list_1, name_list_2, name_list_3)
print(type(all_name_list))
# 只需要对它使用list转化为列表即可
all_name_list = list(all_name_list)
print(all_name_list)
# 你在实际使用中只需如此即可
# all_name_list = list(chain(name_list_1, name_list_2, name_list_3))
输出结果
<class 'itertools.chain'>
['Brittany Diaz', 'Miranda Calderon', 'Megan Cowan', 'Kimberly Thompson', 'Laura Smith', 'Jonathan Lyons', 'Jeffrey Perez', 'Robert Faulkner', 'Charles Hinton', 'Annette Smith', 'Karen Martin', 'Jasmine Gonzalez', 'Maria Marsh', 'Elizabeth Williams', 'Larry Hayes']
reduce函数
reduce我是在网上看到的,我觉得合并列表用它,一般情况是没必要吧,不过也是一种方法,下面给出相关的资料和示例代码,给大家参考…
官方文档和解释:
functools —— 高阶函数,以及可调用对象上的操作#functools.reduce
将两个参数的函数累积应用于可迭代物的项,从左到右,以便将可迭代对象减少到单个值。
例如,计算 . 左边的参数 x 是累积值,右边的参数 y 是 可迭代对象的更新值。
如果存在可选的初始值设定项, 它在计算中被放置在可迭代对象的项之前,并用作 当 iterable 为空时的默认值。如果未给出初始值设定项,并且 iterable 仅包含一个项,则返回第一项。reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])((((1+2)+3)+4)+5)
大致相当于:
def reduce(function, iterable, initializer=None):
it = iter(iterable)
if initializer is None:
value = next(it)
else:
value = initializer
for element in it:
value = function(value, element)
return value
可能让GPT来解释,更加直观,哈哈:
reduce 函数详细解释
reduce
函数是 Python 中用于减少序列(例如列表、元组等)到单一值的一种功能。它的主要作用是将一个二元函数(只有两个参数的函数)反复应用于序列的元素上,并逐步将结果合并,直到最终得到一个单一的值。
下面将详细讲解 reduce
函数,并通过更通俗易懂的例子来帮助你理解。
1. reduce
函数的基本概念
reduce
函数来自 functools
模块,因此使用它需要先导入这个模块。它的基本用法是:
from functools import reduce
2. reduce
函数的工作原理
reduce
函数接受两个参数:
- 一个 二元函数(即接受两个参数的函数)
- 一个 可迭代对象(如列表)
reduce
的工作过程如下:
- 第一个元素和第二个元素被传入这个函数,计算出一个结果。
- 然后将这个结果与第三个元素传入函数,计算出新的结果。
- 这个过程会一直进行,直到整个可迭代对象被处理完,最终返回一个单一的值。
3. 示例:使用 reduce
计算列表的乘积
示例代码
from functools import reduce
# 定义一个函数来计算两个数的乘积
def multiply(x, y):
return x * y
# 创建一个包含数字的列表
numbers = [2, 3, 4, 5]
# 使用 reduce 函数来计算列表中所有数字的乘积
product = reduce(multiply, numbers)
print(product) # 输出: 120
解释
- 在这个例子中,我们首先定义了一个函数
multiply
,它接受两个参数并返回它们的乘积。 - 创建了一个包含数值的列表
numbers
。 - 然后,我们调用
reduce(multiply, numbers)
:- 首先将
2
和3
传入multiply
,结果是6
。 - 然后将
6
(上一步的结果)和4
传入,结果是24
。 - 最后将
24
和5
传入,得到最终结果120
。
- 首先将
4. 使用内置的函数 add
reduce
函数也可以与内置的函数一起使用。例如,我们可以用 operator
模块的 add
函数来计算列表中所有数字的和:
示例代码
from functools import reduce
from operator import add
# 创建一个包含数字的列表
numbers = [1, 2, 3, 4, 5]
# 使用 reduce 函数来计算数字的和
total = reduce(add, numbers)
print(total) # 输出: 15
解释
- 在这个例子中,我们从
operator
模块中导入了add
函数。 reduce(add, numbers)
执行过程如下:1 + 2 = 3
3 + 3 = 6
6 + 4 = 10
10 + 5 = 15
- 最终结果得到了所有数字的和,输出
15
。
operator 模块简介
operator 模块提供了一套与Python的内置运算符对应的高效率函数。例如,operator.add(x, y) 与表达式 x+y 相同。 许多函数名与特殊方法名相同,只是没有双下划线。为了向后兼容性,也保留了许多包含双下划线的函数。为了表述清楚,建议使用没有双下划线的函数。
5. 实际生活中的类比
可以把 reduce
想象成一个接力赛,每个跑步者需要把他的成绩传递给下一个。第一个跑步者和第二个跑步者的成绩会相加,然后传递给第三个跑步者,依此类推,直到最后一个跑步者完成整个比赛。
6. reduce
函数的注意事项
- 函数必须是二元的:即必须接受两个参数,无法处理接受多个参数的函数。
- 返回的是一个单一值:最终结果是通过将整个序列合并得到的一个值。
7. reduce 合并多个列表示例
from operator import add
from functools import reduce
all_name_list = reduce(add, (name_list_1, name_list_2, name_list_3))
输出结果
['Brittany Diaz', 'Miranda Calderon', 'Megan Cowan', 'Kimberly Thompson', 'Laura Smith', 'Jonathan Lyons', 'Jeffrey Perez', 'Robert Faulkner', 'Charles Hinton', 'Annette Smith', 'Karen Martin', 'Jasmine Gonzalez', 'Maria Marsh', 'Elizabeth Williams', 'Larry Hayes']