列表是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. hdu 1455 Sticks

    Sticks Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  2. 简单几何(直线与圆的交点) ZOJ Collision 3728

    题目传送门 题意:有两个一大一小的同心圆,圆心在原点,大圆外有一小圆,其圆心有一个速度(vx, vy),如果碰到了小圆会反弹,问该圆在大圆内运动的时间 分析:将圆外的小圆看成一个点,判断该直线与同心圆 ...

  3. POJ2396 Budget(有源汇流量有上下界网络的可行流)

    题目大概给一个有n×m个单元的矩阵,各单元是一个非负整数,已知其每行每列所有单元的和,还有几个约束条件描述一些单元是大于小于还是等于某个数,问矩阵可以是怎样的. 经典的流量有上下界网络流问题. 把行. ...

  4. ubuntu桌面进不去,我跪了

    ubuntu12.04 输入密码正确,但仍然跳回到登陆界面,实在受不了啊! 不知道bug再哪里,但是有个方法真是屡试不爽啊.. ctrl+alt+f1切换到字符界面 /home/xxx/.Xautho ...

  5. BZOJ3290 : Theresa与数据结构

    CANCEL操作可以看作删点,X坐标可以离散化 将询问按Z坐标差分,转化成两个求Z<=某个数的和的询问 将操作CDQ分治 每次将前一半的修改.后一半的查询按照Z坐标排序 然后扫描线,每到一个询问 ...

  6. java Android SDK安装与环境变量配置以及开发第一个Android程序

    JAVA的安装与环境变量的配置 1.先下载JAVA,并且安装. 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3 ...

  7. 【NOIP2003】传染病控制(-贪心/dfs)

    我自己yy了个贪心算法,在某oj 0msAC~.然后去wikioi提交,呵呵,原来是之前oj的数据太弱给我水过了,我晕. 我之前的想法是在这棵树上维护sum,然后按时间来割边,每一时刻割已经感染的人所 ...

  8. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,还是在return之后执行?

    这是一个很有趣的问题,我测试的结果是:是在return中间执行. 我在网上搜寻了一些资料,下面是参考代码: /** * */ package com.b510.test; /** * try {}里有 ...

  9. [转]Redis集群的配置

    一:memcache 和 Redis 对比总结 [memecache 特点] 1:速度最快(没有自测,但网上有详细的测试用例) 2:支持水平扩展,可以任意添加节点 [redis 特点] 1:速度没有m ...

  10. poi读写word模板 / java生成word文档

    有一word文档表格 形如: 姓名 ${name} 电话 ${tel} 从数据库读取记录替换上述变量 import java.io.FileOutputStream; import java.util ...