欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python3基础梳理02数据结构之列表(list)和元组(tuple)

程序员文章站 2022-06-14 21:09:16
...

本文主要梳理python序列容器中的列表和元组数据结构的基础知识.。

目录

列表(list)

列表特点

列表创建

列表操作

相加(+)

相乘(*)

索引(index) 

切片

列表元素修改

成员资格

列表推导式

列表方法

append

clear

copy

count

extend

index

inseret

pop

remove

reverse

reversed函数

sort

sorted函数

元组(tuple)

元组特点

元组创建

元组操作

元组方法

我的公众号


先简单说一下python容器和变量两个概念。

python容器

容器(container)是python支持的一种数据结构基本概念,是可包含其他对象的对象(python中一切皆为对象,例如,我正在写的博文,使用的python,键盘等);容器都包含了一个__contains__ 方法(dir函数可查看);三种主要的python容器

  • 序列,如列表,元组和字符串,在序列中,每个元素都有编号;
  • 映射,如字典,在映射中,每个元素都有名称,也叫键;
  • 集合(set)。

python变量(variable)

表示(或指向)特定值的名称;变量名称只能由字母、数字和下划线(_)构成,开头不能为数字;变量赋值及使用,如下。

In [2]: x=3#变量x赋值
In [3]: print(x)#表达式中使用变量
3

列表(list)

  • 列表特点

  1. 使用中括号包围;
  2. 列表中可以存放任意类型和任意个数的元素(字符串,数字,列表,字典等等);
  3. 列表是一种序列容器,具有序列序列通用的方法和函数。
  • 列表创建

In [5]: ["a","b","c",1]#使用[]创建
Out[5]: ['a', 'b', 'c', 1]

IIn [7]: list("124")#使用list函数创建
Out[7]: ['1', '2', '4']

In [8]: [i for i in "Hello" ]#列表推导式创建
Out[8]: ['H', 'e', 'l', 'l', 'o']
  • 列表操作

相加(+),相乘(*),

相加(+)

In [9]: ['1', '2', '4'] + ['H', 'e', 'l', 'l', 'o']
Out[9]: ['1', '2', '4', 'H', 'e', 'l', 'l', 'o']

相乘(*)

In [11]: ['1', '2', '4'] * 2
Out[11]: ['1', '2', '4', '1', '2', '4']

索引(index) 

In [13]: alist = ['1', '2', '4', ['a', 'b']]
In [14]: alist
Out[14]: ['1', '2', '4', ['a', 'b']]

In [15]: alist[0]
Out[15]: '1'

In [16]: alist[-1]
Out[16]: ['a', 'b']

In [17]: alist[-1][0]#嵌套列表索引
Out[17]: 'a'

切片

类似上一节字符串切片操作,略。

列表元素修改

列表中元素可修改,可通过索引或者切片修改。

In [18]: alist[-1] = ['c', 'a']#索引修改
In [19]: alist
Out[19]: ['1', '2', '4', ['c', 'a']]

In [31]: alist[1:3] = []#切片修改
In [32]: alist
Out[32]: ['1', ['c', 'a']]

成员资格

判断某个元素是否存在列表中,存在返回True,否则返回False。

In [210]: a
Out[210]: ['a111', 'a1', 'a']

In [211]: "a" in a
Out[211]: True

In [212]: "a2" in a
Out[212]: False

列表推导式

此处简要介绍,后续详细介绍。

In [210]: a
Out[210]: ['a111', 'a1', 'a']

In [213]: [i[0] for i in a]
Out[213]: ['a', 'a', 'a']

列表方法

dir函数列出列表所有函数和方法,红色为函数,蓝色为方法。

In [36]: print(dir(list))

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

append

列表末尾添加一个元素。

In [2]: alist = ['1', '2', '4', ['c', 'a']]
In [3]: alist.append("hah")

In [4]: alist
Out[4]: ['1', '2', '4', ['c', 'a'], 'hah']

clear

将列表中元素清空。

In [4]: alist
Out[4]: ['1', '2', '4', ['c', 'a'], 'hah']

In [6]: alist.clear()
In [7]: alist
Out[7]: []

copy

复制列表,得到一个副本,等价于list[:],list(list)。

In [130]: a = [1,2,3]
In [131]: b = a.copy()
In [132]: b
Out[132]: [1, 2, 3]

In [133]: b[0] = "hah"#修改b列表
In [134]: b
Out[134]: ['hah', 2, 3]

In [135]: a#b列表修改不会影响a列表
Out[135]: [1, 2, 3]

count

计算某个元素在列表中出现了多少次。

In [138]: a
Out[138]: [1, 2, 3]

In [139]: a.count(1)#1在a中出现1次
Out[139]: 1

In [140]: a.count(4)#4不在a中返回0次
Out[140]: 0

extend

使用一个列表扩展另外一个列表,此处要区别于前面提到的列表相加(效率和可读性不及extend)。

#列表相加
In [145]: a = [1, 2, 3]
In [146]: a + b
Out[146]: [1, 2, 3, 4, 5, 6]

In [147]: a#列表相加未修改a列表
Out[147]: [1, 2, 3]

#extend
In [141]: a
Out[141]: [1, 2, 3]

In [142]: b = [4, 5, 6]
In [143]: a.extend(b)
In [144]: a#extend修改了a列表
Out[144]: [1, 2, 3, 4, 5, 6]

index

查找某个元素第一次出现在列表中的索引号。 

In [150]: a = [1, 2, 3, 3]
In [151]: a.index(1)
Out[151]: 0

In [152]: a.index(3)#返回3第一次出现的索引2
Out[152]: 2

inseret

在列表指定位置添加某个新元素,此处要区别于上文的切片或者索引修改列表的方法(方法效率和可读性不及insert)。 

#切片或者索引修改法
In [160]: a = [1, 2, 3, 3]
In [161]: a[1:1] = ["haha"]
In [162]: a
Out[162]: [1, 'haha', 2, 3, 3]#insert方法

In [153]: a
Out[153]: [1, 2, 3, 3]

In [154]: a.insert(1, "haha")
In [155]: a
Out[155]: [1, 'haha', 2, 3, 3]

pop

从列表中删除一个元素,默认删除最后一个元素,可指定索引号删除对应元素,并返回这一元素。

pop是唯一既修改列表又返回一个非None值的列表方法。

In [163]: a
Out[163]: [1, 'haha', 2, 3, 3]

In [164]: a.pop()
Out[164]: 3

In [165]: a
Out[165]: [1, 'haha', 2, 3]

In [167]: a.pop(1)#删除索引为1的元素,并返回
Out[167]: 'haha'

In [168]: a
Out[168]: [1, 2, 3]

remove

删除列表中第一次出现的元素。

In [170]: a = [1, 2, 3, 3]
In [171]: a.remove(3)

In [172]: a
Out[172]: [1, 2, 3]

In [173]: a.remove(4)#元素不存在是,报错并退出执行
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-173-181f025cbb19> in <module>
----> 1 a.remove(4)

ValueError: list.remove(x): x not in list

reverse

将列表中元素顺序颠倒。

In [183]: a
Out[183]: [2, 1]

In [184]: a.reverse()
In [185]: a
Out[185]: [1, 2]

reversed函数

该函数可以达到reverse相同的目的。

In [186]: reversed(a)#返回一个迭代器
Out[186]: <list_reverseiterator at 0x601cdd8>

In [187]: list(reversed(a))
Out[187]: [2, 1]

sort

对列表就地排序(默认低到高排序,即升序),而不是返回排序后的列表的副本。 

In [191]: a = [1, 3, 5, 3, 0]
In [192]: a.sort()
In [193]: a#就地修改了
Out[193]: [0, 1, 3, 3, 5]

In [194]: b = a.sort()#不是返回排序后的a列表的副本,所以b为None
In [195]: b

#sort的key和reverse参数
#key后的函数自己可以自定义,即自己可以设定排序规则。key默认为None。
In [204]: a = ["a111", "a1", "a"]
In [207]: a.sort(key=len, reverse=True)#len按元素长度排序,reverse=True指定按从大到小排序
In [208]: a
Out[208]: ['a111', 'a1', 'a']

sorted函数

返回被列表排序后的一个副本,默认从低到高排序,要区别于sort方法。

In [199]: a = [1, 3, 5, 3, 0]
In [200]: b = sorted(a)
In [201]: b
Out[201]: [0, 1, 3, 3, 5]

In [202]: a
Out[202]: [1, 3, 5, 3, 0]

元组(tuple)

  • 元组特点

  1. 使用小括号()包围;
  2. 元组和列表一样也是序列容器,具有序列的通用操作;
  3. 元组和列表最大的区别是不可修改(和前面介绍的字符串一样不能修改),所以元组不具有列表的大量方法。
  • 元组创建

In [225]: (1, 2, 3, 4)#小括号()包围一串数字
Out[225]: (1, 2, 3, 4)

In [227]: tuple([1, 2, 3, 4])#使用tuple函数
Out[227]: (1, 2, 3, 4)

In [228]: tuple("1234")
Out[228]: ('1', '2', '3', '4')
  • 元组操作

  1. 不能修改元组;
  2. 可以切片,索引,相加等操作元组,可参考列表操作。
  • 元组方法

由于元组不可修改,元组方法和列表有很大区别,如下。有count和index方法,用法类似列表中方法。

In [222]: print(dir(list))#列表的内置函数和方法

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

In [219]: print(dir(tuple))#元组的内置函数和方法

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']


我的公众号

力求详细专业介绍生信,python等语言相关技术,欢迎一起学习!

python3基础梳理02数据结构之列表(list)和元组(tuple)

 

 

 

 

 

 

 

 

相关标签: python