四、列表

关于《python编程快速上手-让繁琐工作自动化》的学习笔记

1.列表数据类型

“列表”是一个值,它包含多个字构成的序列。“列表值”指的是列表本身,而不是指列表之内的那些值。列表从左方括号开始,右方括号结束,即[]。列表中的值也称为“表项”,用逗号分隔。

  • 用下标取得列表中的单个值
    列表后面方括号内的整数被称为“下标”。列表中的第一个值下标为0,第二个值下标为1,第三个值下标为2,以此类推
>>>spam=['cat','bat','rat','elephant']
>>>spam[0]
'cat'
>>>spam[1]
'bat'
>>>spam[2]
'rat'
>>>spam[3]
'elephant'
>>>['cat','bat','rat','elephant'][3]
'elephant'
>>>hello+spam[0]
'hello cat'

列表也可以包含其他列表值,这些列表的列表中的值,可以通过多重下标来访问

>>>spam=[['cat','bat'],[1,2,,3,4,5]]
>>>spam[0]
['cat','bat']
>>>spam[0][1]
'bat'
>>>spam[1][4]
5
  • 负数下标
    虽然下标从0开始向上增长,但也可以用负整数作为下标。整数-1指的是列表中的最后一个下标,-2指的是列表中倒数第二个下标,以此类推
>>>spam=['cat','bat','rat']
>>>spam[-1]
'rat'
>>>spam[-2]
'bat'
  • 利用切片取得子列表
    切片输入在一对方括号中,像下标一样,但它有两个冒号分隔的整数。在一个切片中,第一个整数是切片开始处的下标,第二个整数是切片结束处的下标。切片向上增长,直至第二个下标的值,但不包括它。切片求值为一个新的列表值
>>>spam=['cat','bat','rat','elephant']
>>>spam[1:3]
['bat','rat']
>>>spam[0:-1]
['cat','bat','rat']
  • 使用len()取得列表的长度
>>>spam=['cat','bat','rat','elephant']
>>>len(spam)
4
  • 用下标改变列表中的值
>>>spam=['cat','bat','rat','elephant']
>>>spam[1]='hello'
>>>spam
['cat','hello','rat','elephant']
  • 列表的连接和复制
    +操作符可以连接两个列表,得到一个新列表
    *操作符可以用于一个列表和一个整数,实现列表的复制
>>>[1,2,3]+['a','b','c']
[1,2,3,'a','b','c']
>>>['a','b','c']*3
['a','b','c','a','b','c','a','b','c']
>>>spam=[1,2,3]
>>>spam=spam+['a','b','c']
>>>spam
[1,2,3,'a','b','c']
  • 用del语句从列表中删除值
    del语句将删除列表中下标处的值,表中被删除值后面的所有值都将向前移动一个下标
spam=['a','b','c']
>>>del spam[1]
>>>spam
['a','c']

2.使用列表

  • 列表用于循环
>>>supplies=['pens','staplers','flame-throwers','binders']
>>>for i in range(len(supplies)):
    print('Index'+str(i)+' in supplies is: '+ssupplies[i]

Index 0 in supplies is: pens
Index 1 in supplies is: staplers
Index 2 in supplies is: flame-throwers
Index 3 in supplies is: binders
  • in 和not in操作符
    利用in和not in操作符可以确定一个值是否在列表中。像其他操作符一样,in和not in用在表达式中,连接两个值:一个要在列表中查找的值以及待查找的列表,这些表达式将求值为布尔值
>>>spam=['hello','hi','howdy','heyas']
>>>'cat' in spam
Flase
>>>'hello' in spam
True
>>>'cat' not in spam
True
>>>'hello' not in spam
Flase
  • 多重赋值技巧
    多重赋值技巧是一种快捷方式,用列表中的值为多个变量赋值(变量的数目和列表的长度必须严格相等)
>>>cat=['fat','black','loud']
>>>size,color,disposition=cat

3.增强的赋值操作

增强的赋值操作符

增强的赋值语句等价的赋值语句
spam+=1spam=spam+1
spam-=1spam=spam-1
spam*=1spam=spam*1
spam/=1spam=spam/1
spam%=1spam=spam+%1

+=操作符也可以实现字符串的连接,*=操作符也可以实现字符串和列表的复制

4.列表方法

方法和函数是一回事,只是方法是调用在一个值上

  • 用index()方法在列表中查找值
    列表值有一个index()方法,可以传入一个值,如果该值存在于列表中,就返回它的下标;否则python就报ValueError(如果列表中存在重复的值,就返回它第一次出现的下标)
>>>spam=['hello','hi','howdy','heyas']
>>>spam.index('hello')
0
>>>abc=['hello','cat','hello']
>>>abc.index('hello')
0
  • 用append()和insert()方法在列表中添加值
    • append()方法
      将参数添加到列表末尾
    >>>spam=['cat','dog','bat']
    >>>spam.append('moose')
    >>>spam
    ['cat','dog'.'bat','moose']
    
    • insert()方法
      在列表任意下标处插入一个值,第一个参数是新值的下标,第二个参数是要插入的新值
      >>>spam=['cat','dog','bat']
      >>>spam.insert(1,'chicken')
      >>>spam
      ['cat','chicken','dog','bat']
      
  • 使用remove()方法从列表中删除值
    给remove()方法传入一个值,它将从被调用的列表中删除(试图删除列表中不存在的值将会导致ValueError错误,如果该值在列表中出现多次,只有第一次出现的值会被删除)
>>>spam=['cat','bat','rat']
>>>spam.remove('bat')
>>>spam
['cat','rat']
  • 使用sort()方法将列表中的值排序
    数值的列表或字符串的列表,能用sort()方法排序(也可以指定reverse关键词参数为True,让sort()按逆序排序,sort()方法对字符串排序时使用"ASCII字符顺序",而不是实际的字典顺序,如果需要按照普通的字典顺序来排序,需将关键词参数key设置为str.lower)
>>>spam=[2,5,3.14,1,-7]
>>>spam.sort()
>>>spam
[-7,1,2,3.14,5]
>>>spam=['ants','cats','badgers','dogs','elephants']
>>>spam.sort()
>>>spam
['ants','badgers','cats','dogs','elephants']
>>>spam.sort(reverse=True)
>>>spam
['elephants','dogs','cats','badgers','ants']

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

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

  • 可变和不可变类型
    列表是“可变的”数据类型,其值可以添加、删除和改变;而字符串是“不可变的”,尝试对一个字符串中的一个字符进行重新赋值将会导致TypeError错误。“改变”一个字符串的正确方式是使用切片和连接,构造一个“新的”字符串
>>>name='Zophie a cat'
>>>newname=name[0:7]+'the'+name[8:12]
>>>name
'Zophie a cat'
>>>newname
'Zophie the cat'
  • 元组数据类型
    “元组”数据类型几乎与列表数据类型一样,除一下两个方面:
    1.元组输入时用圆括号(),而不是用方括号
    2.元组像字符串一样是不可变的,其值不能被修改、添加和删除
    如果元组中只有一个值,可以在括号内该值的后面跟上一个逗号,表明这是一个元组
>>>type(('hello',))
<class 'tuple'>
>>>type(('hello'))
<class 'str'>
  • 使用list()和tuple()函数来转换类型
    函数list()和tuple()将返回传递给它们的值的列表和元组版本
>>>tuple(['cat','dog',5])
('cat','dog',5)
>>>list(('cat','dog',5))
['cat','dog',5]
>>>list('hello')
['h','e','l','l','o']

6.引用

将列表赋给一个变量时,实际上是将列表的“引用”赋给了该变量。引用是一个值,指向某些数据,列表引用是指向一个列表的值(变量必须保存可变数据类型的值时,例如列表或字典,python就是用引用;对于不可变数据类型的值时,例如字符串、整型或元组,python就保存值本身)

>>>spam=[1,2,3,4,5,6]
>>>cheese=spam
>>>chieese[1]='hello'
>>>spam
[1,'hello',3,4,5,6]
>>>cheese
[1,'hello',3,4,5,6]
  • 传递引用
    当函数被调用时,参数的值被复制给变元。对于列表以及字典,意味着变元得到的是引用的拷贝
  • copy模块的copy()和deepcopy()函数
    • copy()函数
      用来复制列表或字典这样的可变值,而不只是复制引用(不会影响原来的列表或字典)
  >>>import copy
  >>>spam=[1,2,3,4]
  >>>cheese=copy.copy(spam)
  >>>cheese[42]
  >>>spam
  [1,2,3,4]
  >>>cheese
  [1,42,3,4]
  • 如果复制的列表包含了列表,就是用deepcopy()函数同时复制其内部的列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值