Python 第二章 列表和元组(3) 列表

列表是Python中最具灵活性的有序集合对象类型。

列表可以包含任何种类的对象:数字、字符串甚至是其他的列表。

列表是可变对象,它们都支持在原处修改的操作,可以通过指定的偏移值和分片、列表方法调用、删除语句等方法来实现。



基本的列表操作

列表可以使用所有适用于序列的标准操作,例如上面一篇介绍的索引、分片、连接(加)和乘法除此之外,列表是可以改变的。

本节主要介绍改变列表的方法:元素赋值、元素删除、分片赋值以及列表方法(这里注意,不是所有的列表方法都真正改变列表)。


元素赋值:

使用索引标记来给特定的位置明确的元素赋值。如x[2] = 5

>>> x = [1, 1, 1, 1]
>>> x[2] = 5
>>> x
[1, 1, 5, 1]


>>> x[4] = 4
Traceback (most recent call last):
  File "<pyshell#55>", line 1, in <module>
    x[4] = 4
IndexError: list assignment index out of range

注意:不能为位置不存在的元素进行赋值。


删除元素:

使用del语句来实现。

>>> names = ['Alice', 'Beth', 'Cecil', 'Earl']
>>> del names[2]
>>> names
['Alice', 'Beth', 'Earl']

‘Cecil'在列表中删除了,而且列表的长度长4变成了3.


>>> num = [1, 2, 3, 4, 5]
>>> del num[3]
>>> num
[1, 2, 3, 5]



分片赋值:

一次为多个列表中的元素赋值。

>>> name = list('louis')
>>> name
['l', 'o', 'u', 'i', 's']
>>> name[1:] = list('Cherish')
>>> name
['l', 'C', 'h', 'e', 'r', 'i', 's', 'h']
>>>
注意:这里'C'替换了'o', 'h'替换了'u', 'e'替换了'i', 'r'替换了's', 除此之外在没有替换任何其他元素的情况下还插入了'i','s', 'h'


可用分片赋值来插入多个值:

>>> num
[1, 5]
>>> num[1 : 1] = [2 , 3, 4]
>>> num
[1, 2, 3, 4, 5]

在第1个索引之后插入一个序列。


可用分片赋值来删除多个元素:

>>> num
[1, 2, 3, 4, 5]
>>> num[1 : 4] = []
>>> num
[1, 5]

用空的分片代替原来的分片,效果就是删除了原分片中的元素。

>>> num
[1, 2, 3, 4, 5]
>>> del num[1:4]
>>> num
[1, 5]
这里小小的复习下前面的负数分片和步长。
>>> num
[1, 2, 3, 4, 5]
>>> del num[-4:-1:2]
>>> num
[1, 3, 5]
>>> 



列表方法:

方法是一个与某些对象有紧密联系的函数。

一般来说,方法可以这样调用:

对象.方法(参数)


1. append

在列表末尾添加一个新的对象:

>>> lst = [1, 2, 3, 4, 5, 6]
>>> lst.append(7)
>>> lst
[1, 2, 3, 4, 5, 6, 7]



2. count

计算某个元素在列表中出现的次数:

>>> n = ['to', 'be', 'or', 'not', 'to', 'and']
>>> n.count('to')
2


>>> x = [[1, 2], 1, 3, [4,5], 3, [4,5]]
>>> x.count(3)
2
>>> x.count([4, 5])
2


3. extend

在列表的末尾追加一个序列中的多个值。


>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]                            这里a列表被修改

这个操作看起来很像连接操作:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a + b
[1, 2, 3, 4, 5, 6]                        返回一个全新的列表

>>> a
[1, 2, 3]                                      a列表不变

但两者的区别在于:extend方法修改了被扩展的序列。而原始的连接操作则会返回一个全新的列表。


4. index

找出列表中第一个匹配某个值得索引位置:

>>> knights = ['We', 'are', 'the', 'knights', 'who', 'say', 'ni', 'who']
>>> knights.index('who')
4
>>> knights.index('louis')

Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    knights.index('louis')
ValueError: 'louis' is not in list
>>>
当搜索单词‘who’的时候,若‘who’存在于列表中,则返回'who'在列表中第一次出现的索引位置。这里的例子中返回了4.

当搜索单词'louis‘的时候,搜遍整个列表也没找到,就会引发一个异常。



5.insert

insert方法用于将对象插入到列表中:

>>> numbers = [1, 2, 3, 5, 6, 7]
>>> numbers.insert(3,4)
>>> numbers
[1, 2, 3, 4, 5, 6, 7]
>>>

这里numbers.insert(3, 4)括号中的第一参数是指即将要插入序列的索引位置,第二个参数是要插入的值。


6. pop

pop方法会移除列表中的最后一个元素,并且返回该元素的值:

>>> x = [1, 2, 3, 4]
>>> x.pop()
4
>>> x
[1, 2, 3]
>>> x.pop()
3
>>> x
[1, 2]
>>> 


注意:可用append和pop来实现栈。入栈可以使用append方法来代替,出栈可以用pop方法来代替。

注意:pop是唯一一个既能修改列表又返回元素值的列表方法。



7.remove

remove方法用于移除列表中第一个与给定值向匹配的元素:

>>> x = ['T','B','O', 'H', 'M', 'B']
>>> x.remove('B')
>>> x
['T', 'O', 'H', 'M', 'B']

>>> x.remove('A')

Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    x.remove('A')
ValueError: list.remove(x): x not in list

注意:remove是一个没有返回值但却可改变原位置的方法。



8. reverse

reverse方法将列表中的元素反向存放。

>>> x = [1, 2, 3]
>>> x.reverse()
>>> x
[3, 2, 1]

注意:reverse方法改变了列表却不返回值。



9. sort

sort方法用于在原位置对列表进行排序。在’原位置‘进行排序,意味着改变原来的列表,从而让其中的元素都能按一定的顺序排序,而不是简单的返回一个已排序的列表副本。

>>> x = [4, 6, 2, 1, 9,7]
>>> x.sort()
>>> x
[1, 2, 4, 6, 7, 9]

这里需要举些例子来说明原位置的意思。以下面的为例:

当用户需要一个排好序的列表副本,同时又保留原来列表不变,问题就出现了。

>>> x = [4, 6, 2, 1, 9,7]
>>> y = x.sort()
>>> y
>>> print y
None

这里sort方法修改了x,但是却返回空值,所以这样直接y = x.sort()得到值none.

实现上面所说的正确方法是,先把x的副本复制给y, 然后对y进行排序:

>>> x = [4, 6, 2, 1, 9,7]
>>> y = x[:]
>>> y.sort()
>>> y
[1, 2, 4, 6, 7, 9]
>>> x
[4, 6, 2, 1, 9, 7]

y是有序的列表,x列表没变。 实现了上面的用户要求。

注意: 这里用y = x[:]所得到的是包含了x所有元素的分片,是一种很有效率的复制整个列表的方法。只是简单的把x赋值给y是没用的,这只是让x和y指向同一个列表而已:

>>> x = [4, 6, 2, 1, 9,7]
>>> y = x
>>> y.sort()
>>> y
[1, 2, 4, 6, 7, 9]
>>> x
[1, 2, 4, 6, 7, 9]
>>>


再介绍一种直接得到列表一排序副本的方法sorted:

>>> x = [4, 6, 2, 1, 9,7]
>>> y = sorted(x)
>>> y
[1, 2, 4, 6, 7, 9]
>>> x
[4, 6, 2, 1, 9, 7]
>>>

方法sorted将列表x的值按从小到大的顺序写进了列表y. 注意,这个函数不改变列表x中值的位置。


这里回到sort, 介绍三个参数。

参数key, 若想列表按字符串长度排序,那么:

>>> x = ['l', 'lakdka', 'adfa', 'dadafgaga']

>>> x.sort(key =len)
>>> x
['l', 'adfa', 'lakdka', 'dadafgaga']

 

参数reverse, 想让列表逆序排列,那么:

>>> numbers = [5, 2, 9, 7]
>>> numbers.sort(reverse=True)
>>> numbers
[9, 7, 5, 2]

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值