《Python编程快速上手》(四)Python列表

第四章   列表

4.1 列表数据类型

《Python编程快速上手》(四)Python列表_第1张图片

  • "列表"是一个值,它包含多个字构成的序列
  • spam变量被赋予一个值:列表值。但列表值本身就包含多个值(用,隔开)
  • []是个空列表,不包含任何值,类似于空字符串''

4.1.1 用下标取得列表中的单个值

《Python编程快速上手》(四)Python列表_第2张图片

  • 下标从0开始,依次递增
  • 下标访问不能超过列表值的个数
  • 下标只能是整数

《Python编程快速上手》(四)Python列表_第3张图片

  • 列表可包含其他列表,可多重下标访问
  • 第一个下标表明使用哪个列表值,第二个下标表明该列表值中的值

4.1.2 负数下标

《Python编程快速上手》(四)Python列表_第4张图片

  • 下标虽然从0开始,但允许出现负值
  • -1指最后一个下标,-2指倒数第二个,以此类推

4.1.3 利用切片取得子序列

《Python编程快速上手》(四)Python列表_第5张图片

  • “切片”可从列表中获取多个值
  • 切片中,第一个整数是切片开始处下标,第二个整数是切片结束处下标(但不包含)
  • 切片求值为一个新的列表值,切片长度为冒号两边整数之差
  • 可省略切片中冒号两边的一个或两个下标(省略第一个默认为0,省略第二个默认为列表长度)

4.1.4 用 len() 取得列表的长度

《Python编程快速上手》(四)Python列表_第6张图片

4.1.5 用下标改变列表中的值

《Python编程快速上手》(四)Python列表_第7张图片

4.1.6 列表连接和列表复制

《Python编程快速上手》(四)Python列表_第8张图片

  • + 可连接两个列表,得到一个新的列表
  • * 可用于一个列表和一个整数,实现列表复制

4.1.7 用 del 语句从列表中删除值

《Python编程快速上手》(四)Python列表_第9张图片

  • del 语句将删除列表中下标处的值,表中所有在被删除值后面的值,都将向前移动
  • del 语句也可删除简单变量(几乎不用)

4.2 使用列表

catNames = []
while True:
    print('Enter the name of cat' + str(len(catNames) + 1) + ' (Or enter nothing to stop.):')
    name =  input()
    if name=='':
        break
    catNames = catNames + [name]
print('The cat names are:')
for name in catNames:
        print(''+ name)

《Python编程快速上手》(四)Python列表_第10张图片

4.2.1 列表用于循环

《Python编程快速上手》(四)Python列表_第11张图片

  • range()函数返回值是类似列表的值,故上两种方式输出相同
  • 每次迭代时,让变量依次设置为列表中的值

【常用技巧】

《Python编程快速上手》(四)Python列表_第12张图片

4.2.2 in 和 not in 操作符

《Python编程快速上手》(四)Python列表_第13张图片

  • 利用 in 和 not in 可以判断一个值是否在列表中

4.2.3 多重赋值技巧

《Python编程快速上手》(四)Python列表_第14张图片

  • 三行可简写为一行赋值,但变量的数目和列表的长度必须严格相等

《Python编程快速上手》(四)Python列表_第15张图片


4.3 增强的赋值操作

《Python编程快速上手》(四)Python列表_第16张图片

《Python编程快速上手》(四)Python列表_第17张图片  

《Python编程快速上手》(四)Python列表_第18张图片  

《Python编程快速上手》(四)Python列表_第19张图片

  • +=     -=     *=     /=     %=
  • +=操作符也可用于完成字符串和列表的连接
  • *= 操作符也可用于完成字符串和列表的复制

《Python编程快速上手》(四)Python列表_第20张图片


4.4 方法

  • 和函数一回事,只是它是调用在一个值上

4.4.1 用 index() 方法在列表中查找值

《Python编程快速上手》(四)Python列表_第21张图片   《Python编程快速上手》(四)Python列表_第22张图片

  • index()方法用于判断传入的值是否在列表中,有则返回它第一次出现时(若列表中重复出现)的下标,没有则报错

4.4.2 用 append() 和 insert() 方法在列表中添加值

《Python编程快速上手》(四)Python列表_第23张图片

  • append() 方法,将参数插入到列表末尾
  • insert() 方法,将参数插入到指定(下标)位置
  • append() 和insert() 是方法,属于单个数据类型,只能在列表上调用,不能在其他值上调用

4.4.3 用 remove() 方法从列表中删除值

《Python编程快速上手》(四)Python列表_第24张图片

  • remove() 方法:删除列表中与参数相等的第一个出现的值(该值在列表中出现多次)
  • 删除不存在的值时,出错
  • del 语句用于删除知道下标的值,remove() 用于直接删除指定值

4.4.4 用 sort() 方法将列表中的值排序

《Python编程快速上手》(四)Python列表_第25张图片

  • sort() 方法用于列表排序
  • 若指定关键字参数 reverse=True 则逆序排序
  • 不能对既有数字又有字符串的列表排序
  • 排序时,使用ASCII字符顺序,故大写在小写之前
  • 若以字典顺序排序,需指定关键字参数 key=str.lower

《Python编程快速上手》(四)Python列表_第26张图片


4.5 例子程序:神奇的8球和列表

import random

message = ['It is certain',
           'It is decidedly so',
           'Yes definitely',
           'Reply hazy try again',
           'Ask again later',
           'Concentrate and ask again',
           'My reply is no',
           'Outlook not so good',
           'Very doubtful']
print(message[random.randint(0,len(message) - 1)])

《Python编程快速上手》(四)Python列表_第27张图片


4.6 类似列表的类型:字符串和元组

  • 对列表的许多操作,也可作用于字符串:按下标取值、切片、用于for循环、用于len()、in、not in

《Python编程快速上手》(四)Python列表_第28张图片   《Python编程快速上手》(四)Python列表_第29张图片

4.6.1 可变和不可变数据类型

  • 列表是“可变的”数据类型,其值可添加、删除或改变
  • 字符串是“不可变的”,其值不能被更改

《Python编程快速上手》(四)Python列表_第30张图片

【改变字符串的正确方式】切片+连接

《Python编程快速上手》(四)Python列表_第31张图片

4.6.2 元组数据类型

  • 元组使用圆括号()

《Python编程快速上手》(四)Python列表_第32张图片   《Python编程快速上手》(四)Python列表_第33张图片

  • 元组是不可变的

《Python编程快速上手》(四)Python列表_第34张图片

  • 若元组中只有一个值,应在括号内该值后面加上逗号

《Python编程快速上手》(四)Python列表_第35张图片   《Python编程快速上手》(四)Python列表_第36张图片

4.6.3 用 list() 和 tuple() 函数来转换类型

  • 函数list() 和 tuple()将返回传递给它们的值的列表和元组版本

《Python编程快速上手》(四)Python列表_第37张图片   《Python编程快速上手》(四)Python列表_第38张图片


4.7 引用

  • 【对比基本变量与列表】

《Python编程快速上手》(四)Python列表_第39张图片《Python编程快速上手》(四)Python列表_第40张图片

  • 将列表赋给一个变量时,实际上是将列表的“引用”赋给了该变量。引用是一个值,指向某些数据。列表引用是指向一个列表的值(类似C指针、数组名)。
  • 上例中,当创建列表[1,2,3,5,8]时,将对它的引用赋给了变量spam,下一行只是将spam中的列表引用拷贝到cheese,而不是列表值本身。这意味着存储在spam和cheese中的值,现在指向同一个列表。列表本身实际并未得到复制。所以修改cheese第1个元素时,也修改了spam指向的同一个列表。
  • 变量包含对列表值(可变数据类型值,如:列表、字典)的引用,而不是列表值本身。但对于字符串和整数值等(不可变的数据类型值,如:字符串、整数、元组),变量包含的就是其本身

4.7.1 传递引用

def eggs(sth):
    sth.append('hello')

spam=[1,2,3]
eggs(spam)
print(spam)

4.7.2 copy 模块的 copy() 和 deepcopy() 函数

《Python编程快速上手》(四)Python列表_第41张图片

  • cheese=copy.copy(spam)创建了第二个列表,能独立于第一个列表修改
  • 如果复制的列表中包含了列表,需使用copy.deepcopy()函数来复制

《Python编程快速上手》(四)Python列表_第42张图片


4.8 小结

4.9 习题

《Python编程快速上手》(四)Python列表_第43张图片


4.10 实践项目

《Python编程快速上手》(四)Python列表_第44张图片

4.10.1 逗号代码

def strcat(spam):
    spam.insert(len(spam)-1, 'and')
    string = ''
    for i in range(0,len(spam)-2):
        string += spam[i]
        string += ','
    string += spam[len(spam)-2]
    string += ' '
    string += spam[len(spam)-1]  
    return string

spam=['apples','bananas','tofu','cats','pig']#可修改为其他列表
print(strcat(spam))

4.10.2 字符图网格

 

def picture(grid):
    for i in range(0,len(grid[0])):
        for j in range(0,len(grid)):
            print(grid[j][i],end='  ')
        print('\n')

grid = [['.','.','.','.','.','.'],
        ['.','0','0','.','.','.'],
        ['0','0','0','0','.','.'],
        ['0','0','0','0','0','.'],
        ['.','0','0','0','0','0'],
        ['0','0','0','0','0','.'],
        ['0','0','0','0','.','.'],
        ['.','0','0','.','.','.'],
        ['.','.','.','.','.','.'],]
picture(grid)

《Python编程快速上手》(四)Python列表_第45张图片

你可能感兴趣的:(OpenCV-Python)