列表是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列表的更多相关文章

  1. Python基础数据类型(三)list 列表

    3.4列表list [] 列表的格式 lst_l = [1,'123',[1,'www',2],'包青天'] 列表也有索引 print(lst_l[0]) print([-1][0:2]) #包青 切 ...

  2. Python基本数据类型之字符串、数字、布尔

     一.数据类型种类 Python中基本数据类型主要有以下几类: Number(数字) String(字符串) Bool (布尔) List(列表) Tuple(元组) Sets(集合) Diction ...

  3. Python第三天 序列 数据类型 数值 字符串 列表 元组 字典

    Python第三天 序列  数据类型  数值  字符串  列表  元组  字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...

  4. Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式

    Python第三天 序列  5种数据类型  数值  字符串  列表  元组  字典 各种数据类型的的xx重写xx表达式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell ...

  5. Python特色数据类型(列表)(上)

    Python从零开始系列连载(9)——Python特色数据类型(列表)(上) 原创 2017-10-07 王大伟 Python爱好者社区 列表 列表,可以是这样的: 分享了一波我的网易云音乐列表 今天 ...

  6. python基本数据类型之列表和元组

    python基本数据类型之列表与元组 python中list与tuple都是可以遍历类型.不同的是,list是可以修改的,而元组属于不可变类型,不能修改. 列表和元组中的元素可以是任意类型,并且同一个 ...

  7. Python基础数据类型-列表(list)和元组(tuple)和集合(set)

    Python基础数据类型-列表(list)和元组(tuple)和集合(set) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的 ...

  8. python 基础数据类型 之 列表

    列表:定义 和特性 列表定义和创建: 定义:[,]内以逗号分隔,按照索引,存放各种数据类型,一般没有限制,每个位置代表一个元素 range_create = list(range(0, 10))pri ...

  9. Python基本数据类型--列表、元组、字典、集合

    一.Python基本数据类型--列表(List) 1.定义:[ ]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素. 2.列表的创建: # 方式一 list1 = ['name','ag ...

随机推荐

  1. sql 遍历结果print和表格形式

    select * from tb_province --省 pID pName1 北京市2 天津市3 上海市4 重庆市5 河北省6 山西省....... select * from tb_city - ...

  2. 最短路(Floyd_Warshall) POJ 2240 Arbitrage

    题目传送门 /* 最短路:Floyd模板题 只要把+改为*就ok了,热闹后判断d[i][i]是否大于1 文件输入的ONLINE_JUDGE少写了个_,WA了N遍:) */ #include <c ...

  3. React-Native 之控件布局

    Nodejs 一度将前端JS 推到了服务器端,而15年FB的React-Native RN再一次将JS 推到了移动端的开发浪潮中.RN的优势这里不再重复,它是我们这些习惯了服务端.web端开发,而又不 ...

  4. 一只小蜜蜂...[HDU2044]

    一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  5. 使用HttpsURLConnection发送POST请求

    重写X509TrustManager private static TrustManager myX509TrustManager = new X509TrustManager() { @Overri ...

  6. Sublime Text 2配置

    gedit用了很久,终于换编辑器了T_T Sublime Text 自行百度谷歌. 一开始我在官网下载的压缩包,然后自己配置.搞了半天后果断删掉...还是用源的自动安装吧.T_T 恩.下面的命令 su ...

  7. 动态树之link-cut tree

    说好的专题... lct的一些概念看论文 杨哲<QTREE解法的一些研究> 简单易懂. 首先不要把lct想象得很难,其实很水的.lct就是很多splay树维护的树... lct的acces ...

  8. GC 基础

    = GC 基础 ===================== JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中 Heap = {Old + NEW = { Eden , from, ...

  9. C# JS URL 中文传参出现乱码的解决方法

    在传参是先编码在传输,接受时先编码,在接收. string mm=Server.URLEncode(你); Response.Redirect(index.aspx?mm=+mm); 然后在接收页解码 ...

  10. [转载]CAsyncSocket及CSocket注解

    MFC疑难注解:CAsyncSocket及CSocket MFC对SOCKET编程的支持其实是很充分的,然而其文档是语焉不详的.以至于大多数用VC编写的功能稍复杂的网络程序,还是使用API的.故CAs ...