跳转至

列表

介绍列表

列表是一种数据容器,既然是容器,肯定是用来装东西的。如果学过C语言的朋友都知道,声明数据的数据类型,就可以往数组中添加元素了,不过添加的元素都是声明的类型。而在Python中,不需要声明数据的类型,也就意味着list这种容器可以存放不同的数据类型。

我们创建列表:

>>> l = [1, 4, 2, 10, 9]
>>> type(l) # 查看数据类型
list
>>> l = ['a', 1, 2, 3, None, True] # 可以存放不同类型的数据
>>> len(l) # 列表的元素个数
6
>>> l = [1, [1,2,3], 4,5,6, 'hello'] # 列表甚至还可以嵌套列表

列表的访问

列表作为数据的容器,创建这个容器以后,接下来的任务就是如何访问这个列表元素。与数组访问一样,我们可以直接用下标访问。

>>> l = list(range(10)) # range函数创建0-9的列表
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l[0] # 第一个元素从0开始
0
>>> l[:4] # 前4个元素 注意返回的是0-3四个元素
[0, 1, 2, 3]
>>> l[1:5]
[1, 2, 3, 4]
>>> l[4:-1] # 从第5个元素开始到倒数第1个元素,不包括最后一个元素的
[4, 5, 6, 7, 8]
>>> l[4:] # 从第5个元素开始到最后一个元素
[4, 5, 6, 7, 8, 9]
>>> l[1:-1:2] # 从第2个元素开始,到倒数第2个元素,步长为2
[1, 3, 5, 7]
>>> l[::-1] # 步长为-1, 表示反向输出
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

上面分别演示了访问列表的3种方式,可以总结如下:

  • 1个元素,访问单个元素。如l[0],l[:4], l[4:]
  • 2个元素,某一段连续元素。如l[1:5], l[4:-1]
  • 3个元素,某一段具有步长的元素。如l[1:-1:2]

列表遍历

我们吧东西放在容器中,最常做的事情应该就是在容器中找我们想要的东西了。遍历就是在不重复的情况下,找遍所有的元素。通常使用for来循环遍历。

for item in list_data:
    pass
遍历的方式如上,item从第0个元素开始,知道取完list_data中所有元素循环停止。通常在C语言或者Java中通过定义下标来遍历,Python中同样是支持下标索引的。

有没有办法既能获取下标,又能同时获取到元素呢?使用enumerate函数进行处理,第一个元素为下标,第二个就是列表中的元素了。

l = ['a', 1, 2, 3, None, True]
for idx, item in enumerate(l):
    print(idx, "==>", item)

输出结果为:

0 ==> a
1 ==> 1
2 ==> 2
3 ==> 3
4 ==> None
5 ==> True

列表的方法

想象一下你有一个容器里面存放各种玩具,你现在新买了一批玩具,是不是要把他们放进去,有些玩具不想要了,想要扔掉,这些都是正常的处理方法。

这些处理方法包括添加一个元素,添加多个元素,删除元素,统计某个元素等方法。

添加元素

添加一个元素使用append方法,会把新元素添加到列表的末尾。

list_data.append(item)

插入元素

插入元素可以指定插入的位置。insert(index, object)其中index为要插入的位置,object要插入的元素(对象)。

>>>l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>l.insert(0, 10)
>>>l
[10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

删除元素

删除元素使用remove方法remove(value)其中的value是列表的元素的值,如果有多个相同的值,只删除第一个。

>>>l = [10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3]
>>>l.remove(1) # 删除第一个值
>>>l[10, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3]
>>>l.remove(100) # 100 不在列表中
exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-45-97ac9c8b213c>", line 1, in <module>
    l.remove(100)
ValueError: list.remove(x): x not in list

弹出元素

弹出某个位置的元素,使用pop(index=-1)方法。其中的index为列表的下标,默认是最后一个元素。与remove方法的区别在于,remove删除第一个元素值,而pop删除index位置的值,并且返回这个元素值。

>>>l = [10, 2, 4, 5, 6, 7, 8, 9, 1]
>>>l.pop(-2) # 删除倒数第二个元素,
9
>>>l
[10, 2, 4, 5, 6, 7, 8, 1]

扩展列表

一次性添加多个元素,可以使用循环使用append或者insert方法. 一次性添加整个列表的元素,使用extend方法.

>>> l1 = [1,2,3]
>>> l2 = [4,5,6]
>>> l1.extend(l2)
>>> l1
[1, 2, 3, 4, 5, 6]
>>>l1.append(l2) # 注意与append的区别
[1, 2, 3, [4, 5, 6]]

元素反向

元素的反向输出,前面讲列表的访问时候,用索引的方式可以实现元素的反向输出。l[::-1],步长为-1,也就是反向输出。除此之外列表也提供了反向输出的方法,reverse.

>>> l = [10, 2, 4, 5, 6, 7, 8, 1]
>>> l.reverse() # 修改了原来列表的元素
>>> l
[1, 8, 7, 6, 5, 4, 2, 10]
>>>l[::-1] #  反向输出,但不修改原始列表
[10, 2, 4, 5, 6, 7, 8, 1]
>>> l
[1, 8, 7, 6, 5, 4, 2, 10]

元素计数

如果需要统计列表中元素值的个数,可以使用count(value)方法。

>>> l = [1, 2, 4, 5, 6, 7, 8, 10, 1, 5]
>>> l.count(5)
2
>>> l.count(100) # 不存在的元素返回0个
0

总结

本文讲述了列表作为数据容器,用来存放不同类型的数据(对象)。重点讲述了列表的访问和列表的操作方法。除次之外列表的方法还有几种,读者可以自行查看。在ipython环境下使用??或者help来查看方法的帮助文档。

评论