Python在项目中的实战-列表

一、列表介绍

首先我们先创建一个列表,如下所示:

>>> new_list = [1, "test", [0], {"a": "a"}]
>>> new_list
[1, 'test', [0], {'a': 'a'}]

在python中,列表是由指定顺序排列的元素组成,是一种有序的集合,在实际工作中是一个比较常用的数据结构。python列表元素可以是不同类型的数据,保留了数组内存连续性访问的方式,每个节点存储指针而非实际数据,如下图所示:

图片说明
由上图可知,列表中指针指向列表元素,列表元素通过列表索引获取,可以正向索引获取或fan
图片说明

刚接触Python的同学对python列表可能会认为它跟C语言的数组一样,其实不然。下面我从以下几个维度介绍下python列表和C语言数组的区别

数据结构 长度 数据类型 空间效率
Python列表 动态可变 数组中的元素可以是不同的类型 列表listPython的一个高级特性,是对源码中对象(PyListObject)的一个抽象,而因为不同的list存储元素的个数不同,PyListObject在创立时就被设置为变长对象。并且,该对象中还内置了像插入、删除等方法,可在运行时动调整维护列表内存和元素
C语言数组 不可变 数组中的元素只能是同一种类型,在数组初始化时已经确定 创建数组时,需指定数据大小,预先按大小分配内存空间。即使只存储一个元素也要为所有元素预先分配内存,空间效率不高

二、元组

在Python数据结构中有一种类型和列表有点类似,那就是元组。元组和列表都是可以存储任何数据类型的序列,并且可以通过索引来访问。虽然类似,但也有不同,下面通过元组的以下介绍区别与列表的不同。

1、元组的创建

与列表不同的是,元组是用()定义。

>>> tup = ('C++', 'C#', 'python', 'java', 'go', 'lua')
>>> tup
('C++', 'C#', 'python', 'java', 'go', 'lua')

2、元组元素获取

元组元素获取可通过索引获取

>>> tup = ('C++', 'C#', 'python', 'java', 'go', 'lua')
>>> tup
('C++', 'C#', 'python', 'java', 'go', 'lua')
>>> tup[0]
'C++'

3、元组修改

元组是不能修改的,如果我们想列表那样修改元组元素,会有报错。

>>> tup = ('C++', 'C#', 'python', 'java', 'go', 'lua')
>>> tup[1] = "aa"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

4、元组删除

元组内元素不但不能修改也不能删除,但是可以删除整个元组。

>>> tup = ('C++', 'C#', 'python', 'java', 'go', 'lua')
>>> del tup
>>> tup
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'tup' is not defined

最后通过一个表格总结列表和元组的区别:

数据结构 语法 是否可变 占用空间
列表 使用[]来定义列表,如:[1,"a",[4] 可变。如:
>>> language = ["C++","C#","python","java","go","lua"]
>>> language[0] = "a"
>>> language
["a","C#","python","java","go","lua"]
数据在创建的时候会为之后添加元素预留空间,所以保存相同元素个数时,数组占用空间大
元组 使用()来定义列表,如:(1,"a",[4]) 不可变。如:
>>> language = ("C++","C#","python","java","go","lua")
>>> language[0] = "a"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
\TypeError: 'tuple' object does not support item assignment</module></stdin>
元组不可变,创建的时候大小固定,相同元素个数的情况下,占用空间比数据小

三、列表运算

在列表介绍中我们说到,列表是有序且是动态可变的,接下来我以列表language的一些运算验证这些说法。

1、列表获取与拼接

  • 通过列表索引获取列表元素,从0开始,最后一个元素索引是-1。
      >>> language
      ['C++', 'C#', 'python', 'java', 'go', 'lua']
      >>> language[0]
      'C++'
      >>> language[3]
      'java'
      >>> language[-1]
      'lua'
  • 列表截取
      >>> language = ["C++","C#","python","java","go","lua"]
      >>> language[1:]
      ['C#', 'python', 'java', 'go', 'lua']
      >>> language[1:3]
      ['C#', 'python']
      >>> language[:-3] 
      ['C++', 'C#', 'python']
  • 列表拼接
      >>> a = [1, 2, 3]
      >>> b = [4, 5, 6]
      >>> a+b
      [1, 2, 3, 4, 5, 6]

2、列表插入

列表是有序且动态可变的,我们可以在列表任意位置插入元素。

>>> language = ["C++","C#","python","java","go","lua"]
>>> language.insert(2,".net")
>>> language
['C++', 'C#', '.net', 'python', 'java', 'go', 'lua']

3、列表添加

使用append实现列表元素添加,追加到列表最后。

>>> language = ["C++","C#","python","java","go","lua"]
>>> language.append("PHP")
>>> language
['C++', 'C#', 'python', 'java', 'go', 'lua', 'PHP']

4、列表修改

修改列表元素,指定列表索引修改列表元素。

>>> language = ["C++","C#","python","java","go","lua"]
>>> language[2] = "PHP"
>>> language
['C++', 'C#', 'PHP', 'java', 'go', 'lua']

5、列表删除

删除列表元素的方法有以下三种:

  • (1)、使用del语句删除,需知道元素索引
      >>> language = ["C++","C#","python","java","go","lua"]
      >>> del language[2]
      >>> language
      ['C++', 'C#', 'java', 'go', 'lua']
  • (2)、使用pop()方法删除,默认删除列表最后一个元素,也可指定索引删除
      删除列表最后一个元素
      >>> language = ["C++","C#","python","java","go","lua"]
      >>> language.pop()
      >>> language
      ['C++','C#','python','java','go']
      删除列表指定索引元素
      >>> language = ["C++","C#","python","java","go","lua"]
      >>> language.pop(1)
    'C#'     
      >>> language
      ['C++','python','java','go','lua']
  • (3)、使用remove()方法删除,需知道元素值
        >>> language = ["C++","C#","python","java","go","lua"]
        >>> language.remove("C#")
        >>> language
        ['C++', 'python', 'java', 'go', 'lua']
    ps:如果列表中有相同的元素,remove操作会从索引值最小的位置yigege删除

列表其他操作

  • 获取列表长度
      >>> language = ["C++","C#","python","java","go","lua"]
      >>> len(language)
      6
  • 列表元素复制
      >>> test = ["test"]
      >>> test*4
      ['test', 'test', 'test', 'test']
  • 列表遍历
      >>> language = ["C++","C#","python","java","go","lua"]
      >>> for l in language:print(l)
      ... 
      C++
      C#
      python
      java
      go
      lua
  • 嵌套列表
      >>> language = [["go", "C++", "python"],["JS", "html"]]

三、列表内置函数

函数 说明 举例
len(list) 获取列表元素个数 >>> language = ["C++","C#","python","java","go","lua"]
>>> len(language)
6
max(list) 获取列表中元素最大值 >>> test = [1, 2, 3, 4]
>>> max(test)
4
min(list) 获取列表中元素最小值 >>> test = [1, 2, 3, 4]
>>> min(test)
1
list(seq) 将元组类型转换成列表 >>> test = (1, 2, 3, 4)
>>> list(test)
[1, 2, 3, 4]

四、列表内置方法

方法 说明 举例
list.append(obj) 在列表末尾添加新元素 >>>language = ["C++","C#","python","java","go","lua"]
>>> language.append("go")
>>> language
['C++', 'C#', 'python', 'java', 'go', 'lua', 'go']
list.count(obj) 统计某个元素在列表中出现次数 >>>language = ["C++","C#","python","java","go","lua","go"]
>>> language.count("go")
2
list.extend(seq) 扩展列表,在列表末尾一次性追加另一个列表的元素 >>> language = ["C++","C#","python","java","go","lua"]
>>> other = ["PHP", "JS"]
>>> language.extend(other)
>>> language
['C++', 'C#', 'python', 'java', 'go', 'lua', 'PHP', 'JS']
list.index(obj) 获取某个元素在列表中的索引位置 >>> language = ['C++', 'C#', 'python', 'java', 'go', 'lua', 'PHP', 'JS']
>>> language.index("python")
2
list.insert(index, obj) 在列表指定索引位置添加元素 >>> language = ["C++","C#","python","java","go","lua"]
>>> language.insert(2,".net")
>>> language
['C++', 'C#', '.net', 'python', 'java', 'go', 'lua']
list.pop([index=-1]) 移除列表中的一个元素,并返回该元素的值(默认最后一个元素) >>> language = ["C++","C#","python","java","go","lua"]
>>> language.pop(1)
'C#'
>>> language
['C++','python','java','go','lua']
list.remove(obj) 删除列表中指定元素 >>> language = ["C++","C#","python","java","go","lua"]
>>> language.remove("C#")
>>> language
['C++', 'python', 'java', 'go', 'lua']
list.reverse() 列表反向排序 >>> language = ['C++', 'C#', 'python', 'java', 'go', 'lua', 'PHP', 'JS']
>>> language.reverse()
>>> language
['JS', 'PHP', 'lua', 'go', 'java', 'python', 'C#', 'C++']
list.sort( key=None, reverse=False) 列表排序 >>> language = ["C++","C#","python","java","go","lua"]
>>> language.sort()
>>> language
['C#', 'C++', 'go', 'java', 'lua', 'python']
list.clear() 列表清空 >>> language = ["C++","C#","python","java","go","lua","go"]
>>> language.clear()
>>> language
[]
list.copy() 复制列表 >>> language = ["C++","C#","python","java","go","lua","go"]
>>> copy_language = language.copy()
>>> copy_language
['C++', 'C#', 'python', 'java', 'go', 'lua', 'go']
全部评论

相关推荐

秋招投简历提醒助手:个人经验是,一般面二十场左右就会进入侃侃而谈阶段。我今年七月末的时候开始的第一次面试,都是很多不会,回复很慢。后面慢慢迭代,到九月中的时候基本上面啥说啥,很放松的状态
远程面试的尴尬瞬间
点赞 评论 收藏
分享
11-13 14:37
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务