列表的一些特点:

  1. 列表是最常用的线性数据结构

  2. list是一系列元素的有序组合

  3. list是可变的

列表的操作,

  1. 增:append、extend、insert

  2. 删:clear、pop、remove

  3. 改:reverse、sort

  4. 查:count、index

  5. 其他:copy

>>> [a for a in dir(list) if not a.startswith('__')]
['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

定义与初始化列表

lst = list() # 使用list函数定义空列表
lst = [] # 使用中括号定义空列表
a = [1, 2, 3] # 使用中括号定义带初始值的列表
lst = list(range(1, 10)) # 使用list函数把可迭代对象转化为列表
a_ref = aa[2] = 100

列表的访问

可以通过下标访问列表中的元素,下标从0开始。当下标超出范围时,会抛出IndexError异常。下标可以是负数,负数下标从右开始,与正数下标刚好相反。负数下标从-1开始。不管是正数的下标还是负数的下标,只要超出范围,就会抛出异常。

lst = [1, 2, 3]
print(lst[0])
print(lst[2])
# print(lst[3])

列表常用操作

我们可以通过列表的下标(或索引)找到相应的元素,也可以通过列表元素找到其相应的索引。列表提供了index方法可以实现此需求,接下来我们就看一下如何使用列表的index方法。

lst = [1, 2, 3, 2, 5]help(lst.index)
 : Help on built-in function index:
 : 
 : index(...) method of builtins.list instance
 :     L.index(value, [start, [stop]]) -> integer -- return first index of value.
 :     Raises ValueError if the value is not present.
 :

index可以有其他两个参数,start,stop可以为负数,但是总是从左往右查找。

index方法根据值返回第一个索引。

a_copy = a[:]
a.append(300) # 在列表的末尾增加一个元素
a.insert(1, 50) # 在指定位置增加一个元素,如果索引超出范围,如果是正索
# 引,等效于append,如果索引为负数,等效于insert(0, object)。
a.pop() # 默认从列表最后移除一个元素,可以指定索引;索引不能超出范围
a.sort() # 排序方法a.reverse() # 反转方法
a.remove(value) # 移除列表中第一次出现的value,如果value不存在,则抛出ValueError异常
del a[1]

列表的count方法用于返回列表里出现元素的个数,如果没有就返回0。

lst = [1, 2, 3, 2, 3, 5]
print(lst.count(2))
print(lst.count(5))
# there was no element 0
print(lst.count(0))

count方法的原型:

def count(lst, value):
    c = 0
    for x in lst:
        if x == value:
            c += 1
    return c 

index和count的时间复杂度是O(n)线性复杂度(效率与数据规模成线性相关)。

由于列是可变的数据结构,因此可以对列表的元素可以进行修改。修改列表的元素直接使用下标操作取出元素并对其赋值即可。

lst = [1, 2, 3, 2, 4, 3, 5]
print(lst[2])
lst[2] = 5
print(lst[2])
# 对超出范围的索引修改元素,会抛出IndexError异常
# lst[7] = 7

增加列表元素,使用修改列表元素的方法不能增加列表元素。可以使用append方法来增加列表的元素,

lst = [1, 3, 5, 7]

lst.append(9)
print(lst)
lst.extend([1, 2, 3])
print(lst)
lst.extend(range(3))
print(lst) # remove
# 根据值来删除
# 从左到右删除第一次出现的元素
lst.remove(1)
print(lst)
# 删除一个不存在的值时,会抛出ValueError异常
# lst.remove(10)# pop
# 默认返回并删除最后一个元素
lst.pop()
print(lst)
# pop可以有参数
# 返回并删除索引所在位置的元素
lst.pop(1)
print(lst)
# 当pop不存在的索引时,抛出IndexError异常
# lst.pop(100)

运行结果为:

 : [1, 3, 5, 7, 9]
 : [1, 3, 5, 7, 9, 1, 2, 3]
 : [1, 3, 5, 7, 9, 1, 2, 3, 0, 1, 2]
 : [3, 5, 7, 9, 1, 2, 3, 0, 1, 2]
 : [3, 5, 7, 9, 1, 2, 3, 0, 1]
 : [3, 7, 9, 1, 2, 3, 0, 1] 

append与extend的对比:

  • append原地修改列表,返回None

  • extend原地修改,返回None

  • append操作单个元素

  • extend操作可迭代对象

pop与remove的对比:

  • pop是弹出索引对应的值

  • remove是删除最左边的第一次出现的值

  • pop针对的是索引

  • remove针对的是值

  • pop不传递index参数时,其时间复杂度为O(1)

  • pop传递index参数时,其时间复杂度为O(n)

insert可以在指定的位置处插入元素。当insert时,索引超出范围时:

  • 索引是负数,会在第0个元素前插入元素

  • 索引是正数,会在最后一个元素后插入元素

lst = [1, 3, 5, 7]
lst.insert(2, 'm')
print(lst)
lst.insert(10, 'e')
print(lst)
lst.insert(-10, 'a')
print(lst)

运行结果为:

: [1, 3, 'm', 5, 7]
: [1, 3, 'm', 5, 7, 'e']
: ['a', 1, 3, 'm', 5, 7, 'e']

insert操作的时间复杂度是O(n),append操作的时间复杂度是O(1)。

列表有copy的方法,

lst1 = [1, 3, 2, 5, 7]
lst2 = lst1 # 赋值操作,对可变对象是引用传递,对不可变对象是传值
print(lst2)
lst2.remove(2)
print(lst2)
print(lst1)
lst1 = [1, 3, 2, 5, 7]
lst2 = lst1.copy() # 影子拷贝
lst2.remove(2)
print(lst2)
print(lst1)

运行结果为:

: [1, 3, 2, 5, 7]
: [1, 3, 5, 7]
: [1, 3, 5, 7]
: [1, 3, 5, 7]
: [1, 3, 2, 5, 7]

赋值操作传递的是引用,也叫浅拷贝。

copy方法的原型:

def copy(lst):
    tmp = []
    for i in lst:
        tmp.append(i)
    return tmp

清除列表,

lst.clear() # 删除所有元素

求list的长度,

lst = []
print(len(lst))
lst = list(range(4))
print(len(lst))

列表反转,

列表排序,原地修改,返回None。默认是顺序排列,

lst.sort()
lst.sort(reverse=True)

去除列表中重复元素,

L1 = ['b', 'c', 'd', 'b', 'c', 'a', 'a']
L2 = []
[L2.append(i) for i in L1 if not i in L2]
print(L2)
: ['b', 'c', 'd', 'a']
iter = (x ** 2 for x in range(10) if x % 2 == 0)
iter
<generator object <genexpr> at 0x1056b42b0>>>>
for el in iter:
print(el)
0
4
16
36
64
###>>> print [(x, y) for x in (1, 2, 3, 4) for y in (10, 15, 3, 22) if x * y > 25]
[(2, 15), (2, 22), (3, 10), (3, 15), (3, 22), (4, 10), (4, 15), (4, 22)]

来看几个跟列表应用的例子,

# 求素数的列表使用法lst = []for n in range(2, 101):
    for x in lst:
        if n % x == 0:
            break
        else:
            lst.append(n)
            print(n)

一个例子

一个可以输出直方图的例子,代码如下:

(venv) [lavenliu@VM_171_247_centos mysite]$ cat hist.py 
# 从一个列表中创建一个直方图
values = [] # 首先创建一个空列表# 我们输入10个整数
print("Enter 10 integers:")
for i in range(10):
newValue = int(input("Enter integer %d: " % (i+1)))
values += [newValue]
# 创建直方图
print("\nCreating a histogram from values:")
print("%s %10s %10s" % ("Element", "Value", "Histogram"))
for i in range(len(values)):
print("%7d %10d  %s" % (i, values[i], "*" * values[i]))

运行结果为:

venv lavenliu@VM_171_247_centos mysite$ python hist.py 
Enter  integers:
Enter integer 1: 10
Enter integer 2: 8
Enter integer 3: 23
Enter integer 4: 15
Enter integer 5: 2
Enter integer 6: 5
Enter integer 7: 7
Enter integer 8: 9
Enter integer 9: 6
Enter integer 10: 4
Creating a histogram from values:
Element      Value  Histogram
                 **********
                  ********                 ***********************      
                 ***************      
                  **                  *****      
                  *******                  *********                  ******                  ***

Python基础语法-内置数据结构之列表的更多相关文章

  1. Python内置数据结构之列表list

    1. Python的数据类型简介 数据结构是以某种方式(如通过编号)组合起来的数据元素(如数.字符乃至其他数据结构)集合.在Python中,最基本的数据结构为序列(sequence). Python内 ...

  2. Python基础知识2-内置数据结构(下)

    bytes.bytearray #思考下面例子: a = 1 b = a print(a == b)#True print(a is b)#True print(id(a) is id(b))#Fal ...

  3. Python基础知识2-内置数据结构(上)

     分类 数值型 用浮点型的时候注意别和"=="一起使用. 数字的处理函数 注意round()函数的特殊:四舍六入五取偶 类型判断 列表list 列表list定义 初始化 列表索引访 ...

  4. [PY3]——内置数据结构(1)——列表及其常用操作

    列表及其常用操作_xmind图         about列表 列表是一个序列,用于顺序存储数据 列表分为两种:ArrayList(用数组实现).LinkedList(用链表实现) 定义与初始化 #l ...

  5. Python基础语法04-数据结构

    Python Number(数字) Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. Python 支持 ...

  6. 【python基础语法】字符串常用方法 、列表(第3天课堂笔记)

    """ 字符串的方法 join 字符串拼接,将列表转换为字符串 find 查找元素位置 count 查找元素个数 replace 替换字符 split 字符串分割,将字符 ...

  7. Python的4个内置数据结构

    Python提供了4个内置数据结构(内置指可以直接使用,无需先导入),可以保存任何对象集合,分别是列表.元组.字典和集合. 一.列表有序的可变对象集合. 1.列表的创建例子 list1 = []lis ...

  8. python面试总结4(算法与内置数据结构)

    算法与内置数据结构 常用算法和数据结构 sorted dict/list/set/tuple 分析时间/空间复杂度 实现常见数据结构和算法 数据结构/算法 语言内置 内置库 线性结构 list(列表) ...

  9. Python第五章-内置数据结构01-字符串

    Python 内置的数据结构 ​ 到目前为止,我们如果想保存一些数据,只能通过变量.但是如果遇到较多的数据要保存,这个时候时候用变量就变的不太现实. ​ 我们需要能够保存大量数据的类似变量的东东,这种 ...

随机推荐

  1. windows driver

    C:\Windows\System32\DriverStore\FileRepository

  2. MySQL中varchar与char区别

    MySQL中varchar与char区别(转) MySQL中varchar最大长度是多少? 一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字 ...

  3. c++智能指针(2)

    追加一个shared_ptr指针 #include <memory> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { ...

  4. ubuntu系统ftp连接 以及ssh连接

    tfp连接 ssh连接 ubuntu下ssh使用 与 SCP 使用 1 ssh远程登录服务器 ssh username@remote_ip #将username换成自己的用户名,将remote_ip换 ...

  5. 使用vmware安装ubuntu不能上网

    桌面版的话,进入桌面后还可以配置,服务版,我是在安装过程中提示的网络配置时候按照下面的方法手动配置的 安装虚拟机时候要安装网络服务,有的虚拟机在安装过程中可能已经安装好了,主机保持VMware NAT ...

  6. Linux学习笔记:Shell脚本学习

    概念 真正能够控制计算机硬件(CPU.内存.显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁. 由于安全.复杂.繁琐等原因,用户不能直接接触内核(也没有 ...

  7. 【算法】DP解决旅行路径问题

    问题描述 : After coding so many days,Mr Acmer wants to have a good rest.So travelling is the best choice ...

  8. [C#.net]Connection Timeout和Command Timeout

    每次对数据库连接时,我们有时候会碰到连接超时或者命令超时,这两个超时是不一样的.以ADO.NET为例,当客户端和服务器端连接时,碰到的超时情况主要有下面几种: 当从连接池获取一个连接时,碰到超时. 当 ...

  9. 用react脚手架新建项目

    1.全局安装 create-react-app脚手架 [可能需要管理员权限]npm install -g create-react-app 2.创建项目 create-react-app projec ...

  10. 【1】ASP.NET异步(1)

    图标说明了异步的基础认识. 1.如果没有Ajax,提交之后整个页会刷新(左图).右图所示的虚线范围区域加入了ajax技术,提交之后只更新了虚线区域的内容,这样看比较直白. <form>①& ...