列表是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. List<T>的使用

    定义:List<T>类表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索.排序和操作的方法. 作用:泛型最常见的用途是泛型集合我们在创建列表类时,列表项的数据类型可能是int,s ...

  2. Win7系统删除微软拼音

    微软拼音会在使用Office时偷偷的安装,都找不到删除的地方.在网上找了很多方法都不灵光,最后用下面的方法成功删除.   在语言设置窗口里,重新添加一次这个输入法,确定保存,然后再删除,就行了. 这个 ...

  3. ural 1286. Starship Travel

    1286. Starship Travel Time limit: 1.0 secondMemory limit: 64 MB It is well known that a starship equ ...

  4. BZOJ1707 : [Usaco2007 Nov]tanning分配防晒霜

    S向每头奶牛连边,容量1 每个防晒霜向T连边,容量cover 每头奶牛向SPF在自己范围内的防晒霜连边,容量inf 用线段树优化建图跑最大流即可. #include<cstdio> con ...

  5. 李洪强-C语言4-内存分析

    C语言内存分析 一.进制 概念:进制是一种计数方式,是数值的表现形式 4种主要的进制: ①. 十进制:0~9 ②. 二进制:0和1 ③. 八进制:0~7 ④. 十六进制:0~9+a b c d e f ...

  6. c++模版函数

    1.定义 可以使用class或者typename字段来申明 template <class T> template <class T1, class T2, ...class TN& ...

  7. state配置语言实战

    修改配置文件:(base用来放初始化环境.prod用来放生产配置环境) [root@super65 ~]# vim /etc/salt/master [root@super65 ~]# mkdir - ...

  8. shopnc nginx优化配置文件

    user www; worker_processes 2; error_log /var/log/nginx/error.log error; #error_log logs/error.log no ...

  9. FTP协议详解(转)

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application ...

  10. Centos 如何安装Django环境

    Centos 如何安装Django环境 | 浏览:954 | 更新:2014-10-31 20:34 针对Centos这一Linux发行版,进行django环境的搭建过程介绍.   工具/原料 Cen ...