Python基本数据类型之list列表
列表是python中用的非常频繁的数据结构,它是有序序列。之前学的字符串就是一种有序序列。不过列表是可变的。
创建列表
li = list( ) #构造方法创建一个空列表
li = list( iterable_Object ) #以其它可迭代对象为参数初始化一个列表
li = [] #快捷方法创建一个空列表
li= [ i for i in range(1,11)] #推导式创建 非常的pythonic :)
if __name__ == "__main__": li0 = [] print(len(li0)) # 0 li1 = list(") print("li1 is ",li1) # li1 is ['1', '2', '3', '4', '5'] li2 = list(('init','by','tuple')) print("li2 is ",li2) # i2 is ['init', 'by', 'tuple'] li3 = [i for i in range(1,11) if i%2==0] print("li3 is ",li3) # li3 is [2, 4, 6, 8, 10] li4 = [(i,j) "] print("li4 is ",li4) #li4 is [('a', '1'), ('a', '2'), ('a', '3'), ('b', '1'), ('b', '2'), ('b', '3'), ('c', '1'), ('c', '2'), ('c', '3')]
1、可变的引用类型
可变是值列表对象本身可变。 支持追加,扩展,插入,删除,排序,反转等操作。
2、有序序列
列表是有序的,支持索引读写元素。当然也支持slice,详见我的另一篇随笔
3、元素类型任意
列表中的元素可以是任意类型,包括list类型,而且不同类型可以混合存在。
4、运算符
+
*
in
if __name__ == "__main__": li = [1]+[2,3,4,5] #[1, 2, 3, 4, 5] print(li) li+=[6,7,8] print(li) #[1, 2, 3, 4, 5, 6, 7, 8] li = [1]*3 print(li) #[1, 1, 1] print(1 in li) #True
5、内存模型
列表本身是不包含元素的数据的,而只是包含元素的引用。通过引用,再去访问元素实际指向的对象。
if __name__ == "__main__": a = 100 str = " li=[a,str]
再来通过一个深浅拷贝的例子深入说明
if __name__ == "__main__": li = [[1,2],3] li_copy = li.copy(); li_copy[0].pop() print(li) #[[1], 3] 发现副本的变化使源本也改变了 print( id(li[0]) , id(li_copy[0]) ) #1037590501832 1037590501832,一样的地址
第一张图中我们说列表中保存的只是元素的引用而已,这个引用,换个说法就是指针。通过copy方法拷贝的是列表中的元素,也就是引用,同样也是地址。
上图中 li[0] 本身的值是 1037590501832 通过copy方法后,li_copy[0]也获得了li[0]本身的值,所以他也指向列表中的那个嵌套的小列表。
so,通过li_copy来改变那个嵌套的小列表,会反映到li中。
如果需要避免这个情况,我们可以使用深拷贝。
#/usr/bin/env python3 # coding:utf-8 import copy if __name__ == "__main__": li = [[1,2],3] li_copy = copy.deepcopy(li) li_copy[0].pop() print(li) #[[1, 2], 3] 发现副本的变没有让源本改变 print( id(li[0]) , id(li_copy[0]) ) #1046997603464 1046997603528 地址不一样
6、常用API
li.append("1") #追加字符串"1"
li.extend([1,2,3]) #扩张列表,追加多个 ,等效于li +=[1,2,3]
li.insert(3,"hello") #插入
li.pop() #弹出最后一个元素
li.pop(1) #删除索引为1的 元素
li.remove(val) #根据值删除
li.index(val) #返回val元素的索引 没找到 则报错
li.sort() #排序,要求元素之间能比较。原地排序
sorted(li) #返回排序拷贝份,非原地排序
Python基本数据类型之list列表的更多相关文章
- Python基础数据类型(三)list 列表
3.4列表list [] 列表的格式 lst_l = [1,'123',[1,'www',2],'包青天'] 列表也有索引 print(lst_l[0]) print([-1][0:2]) #包青 切 ...
- Python基本数据类型之字符串、数字、布尔
一.数据类型种类 Python中基本数据类型主要有以下几类: Number(数字) String(字符串) Bool (布尔) List(列表) Tuple(元组) Sets(集合) Diction ...
- Python第三天 序列 数据类型 数值 字符串 列表 元组 字典
Python第三天 序列 数据类型 数值 字符串 列表 元组 字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...
- Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式
Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式 目录 Pycharm使用技巧(转载) Python第一天 安装 shell ...
- Python特色数据类型(列表)(上)
Python从零开始系列连载(9)——Python特色数据类型(列表)(上) 原创 2017-10-07 王大伟 Python爱好者社区 列表 列表,可以是这样的: 分享了一波我的网易云音乐列表 今天 ...
- python基本数据类型之列表和元组
python基本数据类型之列表与元组 python中list与tuple都是可以遍历类型.不同的是,list是可以修改的,而元组属于不可变类型,不能修改. 列表和元组中的元素可以是任意类型,并且同一个 ...
- Python基础数据类型-列表(list)和元组(tuple)和集合(set)
Python基础数据类型-列表(list)和元组(tuple)和集合(set) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的 ...
- python 基础数据类型 之 列表
列表:定义 和特性 列表定义和创建: 定义:[,]内以逗号分隔,按照索引,存放各种数据类型,一般没有限制,每个位置代表一个元素 range_create = list(range(0, 10))pri ...
- Python基本数据类型--列表、元组、字典、集合
一.Python基本数据类型--列表(List) 1.定义:[ ]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素. 2.列表的创建: # 方式一 list1 = ['name','ag ...
随机推荐
- sql 遍历结果print和表格形式
select * from tb_province --省 pID pName1 北京市2 天津市3 上海市4 重庆市5 河北省6 山西省....... select * from tb_city - ...
- 最短路(Floyd_Warshall) POJ 2240 Arbitrage
题目传送门 /* 最短路:Floyd模板题 只要把+改为*就ok了,热闹后判断d[i][i]是否大于1 文件输入的ONLINE_JUDGE少写了个_,WA了N遍:) */ #include <c ...
- React-Native 之控件布局
Nodejs 一度将前端JS 推到了服务器端,而15年FB的React-Native RN再一次将JS 推到了移动端的开发浪潮中.RN的优势这里不再重复,它是我们这些习惯了服务端.web端开发,而又不 ...
- 一只小蜜蜂...[HDU2044]
一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- 使用HttpsURLConnection发送POST请求
重写X509TrustManager private static TrustManager myX509TrustManager = new X509TrustManager() { @Overri ...
- Sublime Text 2配置
gedit用了很久,终于换编辑器了T_T Sublime Text 自行百度谷歌. 一开始我在官网下载的压缩包,然后自己配置.搞了半天后果断删掉...还是用源的自动安装吧.T_T 恩.下面的命令 su ...
- 动态树之link-cut tree
说好的专题... lct的一些概念看论文 杨哲<QTREE解法的一些研究> 简单易懂. 首先不要把lct想象得很难,其实很水的.lct就是很多splay树维护的树... lct的acces ...
- GC 基础
= GC 基础 ===================== JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中 Heap = {Old + NEW = { Eden , from, ...
- C# JS URL 中文传参出现乱码的解决方法
在传参是先编码在传输,接受时先编码,在接收. string mm=Server.URLEncode(你); Response.Redirect(index.aspx?mm=+mm); 然后在接收页解码 ...
- [转载]CAsyncSocket及CSocket注解
MFC疑难注解:CAsyncSocket及CSocket MFC对SOCKET编程的支持其实是很充分的,然而其文档是语焉不详的.以至于大多数用VC编写的功能稍复杂的网络程序,还是使用API的.故CAs ...