Python列表拼接与去重的三种高效实现方案
本文深入解析Python中列表拼接与去重的三种常用方法。拼接方面,对比了“+”运算符、切片赋值及extend()方法的内存行为与性能差异;去重方面,介绍了利用集合set、字典键不可重复特性及index()索引判断的实现逻辑。通过代码示例与内存ID分析,帮助开发者根据场景选择最优方案。
Python实现列表拼接和去重的三种方式
在Python编程中,列表拼接是一项基础且高频的操作,主要可通过以下三种方式实现:
- 第一种方式是利用“+”运算符;
- 第二种方式是通过切片赋值实现;
- 第三种方式是调用列表内置的extend()方法。
方式一:使用“+”运算符
>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> id(list1)
4408465160
>>> id(list2)
4408325512
>>> list1 = list1 + list2
>>> list1
[1, 2, 3, 4, 5, 6]
>>> id(list1)
4408504776
该方法直观易懂,但需注意其非就地执行的特性。观察代码执行结果可知,拼接后list1的内存地址(id值)发生了改变,说明系统重新开辟了一块内存空间来存储新列表,原list1并未被修改。
方式二:切片赋值
切片赋值方式实现了就地修改,即直接改变原列表对象,不会生成新的列表实例。然而,这种写法的可读性相对较差,初学者可能不易理解其语法结构。
>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> id(list1)
4408465160
>>> id(list2)
4408504776
>>> list1[len(list1):len(list1)] = list2
>>> list1
[1, 2, 3, 4, 5, 6]
>>> id(list1)
4408465160
方式三:使用列表内置的extend()方法
>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> id(list1)
4408325512
>>> list1.extend(list2)
>>> list1
[1, 2, 3, 4, 5, 6]
>>> id(list1)
4408325512
extend()方法同样执行就地操作,直接在原列表末尾追加新列表的元素。综合对比上述三种方式:虽然“+”运算符易于理解,但它会开辟新内存空间;切片赋值虽就地执行但可读性低;相比之下,Python列表内置的extend()方法在易用性和性能之间取得了较好的平衡,是较为推荐的拼接方式。
Python列表去重的三种实现策略
假设存在如下包含重复元素的列表,我们需要对其进行去重处理,以下是几种可行的实现思路:
num_list = [1,8,9,1,2,3,4,6,5,7,10,5,6,8,3,4]
策略一:利用集合set的特性
第一种方法(通常也是最先想到的):利用集合set的特性。
集合(set)的核心特性是元素唯一性,自动去除重复项。
>>> num_list = [1,8,9,1,2,3,4,6,5,7,10,5,6,8,3,4]
>>> new_list = list(set(num_list))
>>> new_list
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
策略二:利用字典key的不可重复属性
第二种方法(与集合拥有相同特性):利用字典的键(key)不可重复的特性。首先介绍dict.fromkeys(序列, 设置键对应的值)函数,该函数返回一个字典,其键由序列元素构成,值默认为None或指定的统一值。例如:
>>> dict1 = dict.fromkeys([1,2,3,4])
>>> dict1
{1: None, 2: None, 3: None, 4: None}
>>> dict1 = dict.fromkeys([1,2,3,4],5)
>>> dict1
{1: 5, 2: 5, 3: 5, 4: 5}
正式利用字典键的特性进行去重,具体示例如下:
>>> num_list = [1,8,9,1,2,3,4,6,5,7,10,5,6,8,3,4]
>>> num_dict = dict.fromkeys(num_list)
>>> num_dict
{1: None, 8: None, 9: None, 2: None, 3: None, 4: None, 6: None, 5: None, 7: None, 10: None}
>>> new_list = list(num_dict.keys())
>>> new_list
[1, 8, 9, 2, 3, 4, 6, 5, 7, 10]
策略三:利用index()获取首次出现索引
第三种方式:利用list.index()方法返回元素第一次出现的索引。通过判断列表中某值第一次出现的索引值与当前遍历计数器的游标(cursor)值是否相等,若相等则说明是首次出现,将其加入新列表;否则视为重复元素跳过。具体示例如下:
>>> num_list = [1,8,9,1,2,3,4,6,5,7,10,5,6,8,3,4]
>>> new_list = []
>>> cursor=0
>>> while cursor < len(num_list):
... if num_list.index(num_list[cursor]) == cursor:
... new_list.append(num_list[cursor])
... cursor += 1
...
>>> new_list
[1, 8, 9, 2, 3, 4, 6, 5, 7, 10]
至此,关于Python实现列表拼接和去重的三种方式的介绍已完毕。如需了解更多Python列表拼接和去重相关内容,建议搜索本站历史文章或继续浏览后续相关文章。感谢大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









