话说,在Python的世界里摸爬滚打久了,列表这玩意儿,那真是天天见。可别小看它,用处大着呢!有时候,你手里会有两个甚至更多的列表,然后呢?当然是想把它们合并到一起,整整齐齐的,方便后面的操作。那么,问题来了,Python里合并列表的方法,你都掌握了吗?今天,我就来跟你唠唠嗑,说说那些年我用过的、好用的、甚至有点骚气的列表合并技巧。
最最基础的,必须是加号(+)运算符。这简直就是为列表合并量身定做的。比如,你有list1 = [1, 2, 3]
和list2 = [4, 5, 6]
,直接list3 = list1 + list2
,搞定!list3
就成了[1, 2, 3, 4, 5, 6]
。简单粗暴,效果还贼好。不过,要注意,这种方法会创建一个新的列表,原始的list1
和list2
不会改变。属于“和平演变”,不对原列表造成任何伤害。
再来,extend()
方法。这玩意儿,直接修改原列表,把另一个列表的元素追加到它屁股后面。还是上面的例子,如果我不想创建新列表,就想让list1
变长,那就用list1.extend(list2)
。执行完后,list1
就变成[1, 2, 3, 4, 5, 6]
了。这种方法,有点像“鸠占鹊巢”,直接把list2
的东西搬到list1
家里。
还有一种比较“文艺”的合并方法,就是用列表解析。这玩意儿,写起来比较简洁,也比较Pythonic。比如,list3 = [item for sublist in [list1, list2] for item in sublist]
。这句代码,就把list1
和list2
合并成了list3
。可能刚开始看有点懵,其实就是先遍历包含两个列表的列表[list1, list2]
,然后遍历每个子列表的元素,把它们都放到list3
里。这种方法,有点像“乾坤大挪移”,把所有元素都转移到一个新的容器里。
如果你追求极致的效率,而且列表里的元素都是相同类型,那么,itertools
库里的chain()
函数,绝对是你的不二之选。list3 = list(itertools.chain(list1, list2))
。chain()
函数,可以把多个可迭代对象串联起来,然后返回一个迭代器。我们用list()
函数,把这个迭代器转换成列表。这种方法,不会创建中间列表,所以效率很高。特别适合处理大型列表。这种方式,更加偏向底层,性能有明显的优势。
最后,还有一种不太常用,但是有时候也能派上用场的合并方法,就是使用*
运算符。这玩意儿,可以把一个列表重复多次。如果我们要把list1
和list2
合并成一个包含list1
、list2
、list1
的列表,就可以用[list1, list2, list1]
。然后,用*
运算符把这个列表展开:list3 = [item for sublist in [list1, list2, list1] for item in sublist]
。虽然有点绕,但是能实现一些特殊的需求。不过,这种方法,一般不推荐使用,可读性比较差。
现在,我来举几个具体的例子,让你更直观地感受一下这些方法的用法:
例子1:合并两个包含数字的列表
“`python
list1 = [1, 2, 3]
list2 = [4, 5, 6]
使用加号运算符
list3 = list1 + list2
print(f”使用加号运算符合并:{list3}”) # 输出:使用加号运算符合并:[1, 2, 3, 4, 5, 6]
使用extend()方法
list1.extend(list2)
print(f”使用extend()方法合并:{list1}”) # 输出:使用extend()方法合并:[1, 2, 3, 4, 5, 6] (list1 被修改)
list1 = [1, 2, 3] # 重置 list1
list2 = [4, 5, 6]
使用列表解析
list3 = [item for sublist in [list1, list2] for item in sublist]
print(f”使用列表解析合并:{list3}”) # 输出:使用列表解析合并:[1, 2, 3, 4, 5, 6]
import itertools
list1 = [1, 2, 3] # 重置 list1
list2 = [4, 5, 6]
使用itertools.chain()函数
list3 = list(itertools.chain(list1, list2))
print(f”使用itertools.chain()函数合并:{list3}”) # 输出:使用itertools.chain()函数合并:[1, 2, 3, 4, 5, 6]
“`
例子2:合并包含字符串的列表
“`python
list1 = [“hello”, “world”]
list2 = [“python”, “is”, “awesome”]
使用加号运算符
list3 = list1 + list2
print(f”使用加号运算符合并:{list3}”) # 输出:使用加号运算符合并:[‘hello’, ‘world’, ‘python’, ‘is’, ‘awesome’]
“`
例子3:合并包含不同类型元素的列表(不推荐,但可以实现)
“`python
list1 = [1, “hello”, True]
list2 = [3.14, False, None]
使用加号运算符
list3 = list1 + list2
print(f”使用加号运算符合并:{list3}”) # 输出:使用加号运算符合并:[1, ‘hello’, True, 3.14, False, None]
“`
总而言之,合并列表的方法有很多,选择哪种,取决于你的具体需求。如果你只是想简单地合并两个列表,并且不在意创建一个新的列表,那么加号运算符或者extend()
方法就足够了。如果你追求更高的效率,并且处理的是大型列表,那么itertools.chain()
函数是更好的选择。如果你想用更Pythonic的方式来合并列表,那么列表解析也是一个不错的选择。
记住,编程这东西,没有绝对的对错,只有更适合的方案。多尝试,多实践,才能找到最适合你的方法。希望这篇文章,能帮助你更好地掌握Python列表合并的技巧,让你的代码更加简洁、高效。下次再遇到列表合并的问题,你就可以自信地说:“这都不是事儿!”