Python列表操作与深浅拷贝(7)——列表深浅拷贝、删除、反转、排序
列表复制
浅拷贝:简单类型元素全复制,引用类型元素只复制引用
L1 = [3,2,1,[4,5,6],8,'abc']
L1
[3, 2, 1, [4, 5, 6], 8, 'abc'] L2 = L1.copy()
L2
[3, 2, 1, [4, 5, 6], 8, 'abc']
L1[3][1] = 10 #修改L1中的元素L2也随之变化
L1
[3, 2, 1, [4, 10, 6], 8, 'abc']
L2
[3, 2, 1, [4, 10, 6], 8, 'abc']
深拷贝:copy模块提供了deepcopy,引用类型完全复制为新元素
import copy
L3 = copy.deepcopy(L1)
L3
[3, 2, 1, [4, 10, 6], 8, 'abc']
L1[3][1] = 20
L1
[3, 2, 1, [4, 20, 6], 8, 'abc']
L3 #L3为深拷贝新生成的列表,修改L1元素对L3无影响
[3, 2, 1, [4, 10, 6], 8, 'abc']
*:对引用类型做浅拷贝处理
L4 = [[1,2,3]] * 3
L4
[[1, 2, 3], [1, 2, 3], [1, 2, 3]] L4[1][1] = 10
L4
[[1, 10, 3], [1, 10, 3], [1, 10, 3]]
for x in L4:
print(x)
print(id(x)) #取内存地址
[1, 10, 3]
84289032
[1, 10, 3]
84289032
[1, 10, 3]
84289032 #内存地址相同
L5 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
L5
[[1, 2, 3], [1, 2, 3], [1, 2, 3]] for x in L5:
print(x)
print(id(x))
[1, 2, 3]
87157000
[1, 2, 3]
84213512
[1, 2, 3]
87157128
列表删除元素
remove(value) 基于元素查找,移除第一个出现的元素,并会引起列表元素移动O(n)
L6 = [3,2,1,4,5,6,7,2,3,4]
L6
[3, 2, 1, 4, 5, 6, 7, 2, 3, 4] L6.remove(2)
L6
[3, 1, 4, 5, 6, 7, 2, 3, 4] L6.remove(10)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-31-8cf95df45268> in <module>
----> 1 L6.remove(10) ValueError: list.remove(x): x not in list
pop(index) 基于索引查找,移除索引位元素O(1),并会引起列表元素移动O(n)
L6.pop(3)
5
L6
[3, 1, 4, 6, 7, 2, 3, 4] L6.pop(10)
L6
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-33-8663c8410c3d> in <module>
----> 1 L6.pop(10)
2 L6 IndexError: pop index out of range
pop() 移除列表尾部一个元素O(1),效率高
L6.pop()
4
L6
[3, 1, 4, 6, 7, 2, 3]
clear() 清除列表所有元素,使列表长度为0,元素引用计数减1,剩下一个空列表
L6.clear()
L6
[]
列表翻转
reverse() 将列表元素反转,修改自身
L7 = [3,2,1,4,5,6,7,2,3,4]
L7
[3, 2, 1, 4, 5, 6, 7, 2, 3, 4] L7.reverse()
L7
[4, 3, 2, 7, 6, 5, 4, 1, 2, 3]
列表排序
sort(key=function,reverse=True) 对列表元素排序,默认升序,修改自身
key指定不同类型元素如何排序,只在排序中使用,不修改元素
reverse=True为降序排序
L8 = [3,2,1,4,5,6,7,2,3,4,'a','b','c']
L8
[3, 2, 1, 4, 5, 6, 7, 2, 3, 4, 'a', 'b', 'c'] L8.sort()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-46-951f259be954> in <module>
----> 1 L8.sort() TypeError: '<' not supported between instances of 'str' and 'int' L8.sort(key=str,reverse=True)
L8
['c', 'b', 'a', 7, 6, 5, 4, 4, 3, 3, 2, 2, 1]
判断元素存在
in 判断元素在列表中是否存在,返回bool值
'c' in L8
True
4 in L8
True
10 in L8
False
Python列表操作与深浅拷贝(7)——列表深浅拷贝、删除、反转、排序的更多相关文章
- Python列表操作与深浅拷贝(6)——列表索引、查询、修改、扩展
列表list定义 L1 = [] L2 = [1,2,'abc'] L3 = list() L4 = list(range(5)) L5 = [1,'abc',True,None,[4,5,'abc' ...
- Python列表操作与深浅拷贝(5)——数字处理函数、类型判断、列表链表队列栈
python内建数据结构 分类 数值型: int float complex bool 序列对象: 字符串str 列表list 元组tuple 键值对: 集合set 字典dict 数值型 (list ...
- python---基础知识回顾(一)(引用计数,深浅拷贝,列表推导式,lambda表达式,命名空间,函数参数逆收集,内置函数,hasattr...)
一:列表和元组(引用计数了解,深浅拷贝了解) 序列:序列是一种数据结构,对其中的元素按顺序进行了编号(从0开始).典型的序列包括了列表,字符串,和元组 列表是可变的(可以进行修改),而元组和字符串是不 ...
- Python中的列表操作
Python的列表操作可谓是功能强大且方便(相对于Java)简单.常规的操作就不说了(这不是一个入门教程),介绍几个很有特点的例子 添加 # 追加到结尾(append) li = [1, 2, 3, ...
- Python列表操作集合
对于python列表里元素的操作主要分为以下几个方面: 1.向列表里面加元素: 向python列表里面添加元素主要有三种方法: (1)append() append()对于列表的操作主要实现的是在特定 ...
- Python列表操作大全(非常全)
Python列表操作大全(非常全!!!) 对于python列表的理解可以和C语言里面的数组进行比较性的记忆与对照,它们比较相似,对于python里面列表的定义可以直接用方括号里加所包含对象的方法,并且 ...
- 【Python】Python中的列表操作
Python的列表操作可谓是功能强大且方便(相对于Java)简单.常规的操作就不说了(这不是一个入门教程),介绍几个很有特点的例子 添加 # 追加到结尾(append) li = [1, 2, 3, ...
- python列表操作大全
Python列表操作大全 对于python列表的理解可以和C语言里面的数组进行比较性的记忆与对照,它们比较相似,对于python里面列表的定义可以直接用方括号里加所包含对象的方法,并且python的列 ...
- Python学习总结3:元组、列表的操作汇总
参考博客:http://www.cnblogs.com/QG-whz/p/4782809.html 1. 是否可变 元组:用()或tuple函数定义,不可变(元素的值以及整个元组): 列表:用 [] ...
- Python基础学习笔记(六)常用列表操作函数和方法
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-lists.html 3. http://www.liaoxuef ...
随机推荐
- C学习笔记(4)--- 指针的应用(第一部分)
1.指针(pointer)概念: 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明.指针变量声明的一般形式为: ...
- luoguP3258 [JLOI2014]松鼠的新家
树上差分 树上差分分析 使点x到点y的路径上(链上),全加上一个值,可以选择使用树上差分(不用线段树乱搞.... 首先,和普通的差分一样,要有一个tag.然而,对于一个结点,我们需要求出它全部儿子的t ...
- Centos 7 LAMP+wordpress
一.简介 LAMP--->Linux(OS).Apache(http服务器),MySQL(有时也指MariaDB,数据库) 和PHP的第一个字母,一般用来建立web应用平台. 它是 ...
- selenium定位元素的八种方法
web driver提供了八种元素定位的方法: id, name, class name, tag name, link text, partial link text, xpath, css sel ...
- Python文件读取中:f.seek(0)和f.seek(0,0)有什么区别
file.seek()方法标准格式是:seek(offset,whence=0)offset:开始的偏移量,也就是代表需要移动偏移的字节数whence:给offset参数一个定义,表示要从哪个位置开始 ...
- Educational Codeforces Round 63 (Rated for Div. 2) D dp(最大连续子序列)
https://codeforces.com/contest/1155/problem/D 题意 一个n个数的数组\(a[i]\),可以选择连续的一段乘x,求最大连续子序列的值 题解 错误思路:贪心, ...
- Note | Ubuntu18.04安装与配置
目标: 在服务器上配置最新的Ubuntu稳定版本18.04 LTS.18.04比16.04好看很多,非常建议. 有3块硬盘:2块4TB机械硬盘,1块2TB固态硬盘.计划将固态硬盘作为主硬盘,其余两块机 ...
- 基于web公交查询系统----管理员公交站点管理页面实现
主要用到内容:vue,coreui bootstrap框架,Ajax,springmvc搭建的接口,css之类的都是顺手拈来的简单的界面设计 网页代码: <!DOCTYPE html> & ...
- 【shell脚本】自动监控tomcat服务===autoCheck.sh
自动监控tomcat服务,当tommcat服务挂掉时自动重启 一.脚本内容 [root@localhost ]# cat /root/autoCheck.sh #!/bin/bash startTom ...
- 【Wannafly挑战赛29F】最后之作(Trie树,动态规划,斜率优化)
[Wannafly挑战赛29F]最后之作(Trie树,动态规划,斜率优化) 题面 牛客 题解 首先考虑怎么计算\([l,r]\)这个子串的不同的串的个数. 如果\(l=1\),我们构建\(Trie\) ...