相关文章推荐

1、序列简介

序列是一种数据存储方式,用来存储一系列的数据。在内存中,序列就是一块用来存放多个值的连续的内存空间。比如一个整数序列[10,20,30,40], 可以这样示意表示:


a = [10,20,30,40] 在内存中实际是按照如下方式存储的:


从图示中,我们可以看出序列中存储的是整数 对象的地址 ,而不是整数对象的值。python中常用的序列结构有:字符串、列表、元组、字典、集合

2、列表

列表:用于存储任意数目、任意类型的 数据集合 。 列表是内置 可变序列 ,是包含多个元素的有序连续的内存空间,Python 的列表大小可变,根据需要随时增加或缩小。列表定义的标准语法格式: a = [10,20,30,40] 其中,10,20,30,40 这些称为:列表 a 的元素。列表中的元素可以各不相同,可以是任意类型。比如: a = [10,20,'abc',True]

列表对象的常用方法汇总如下,方便大家学习和查阅 【以下方法除了len()外,都无返回值,所有的操作都是直接针对目标列表内容,不会产生新的列表】

2.1、列表的创建

2.1.1、基本语法创建

使用 [] 语法创建列表,例如:

1
2
3
4
5
6
7
8
>>> a = [10,20,'lanting','shuxu']  # 创建的元素可以不同(元素实际存储的是地址)
>>> a = [] # 创建一个空的列表对象

# 修改特定元素只需要覆盖指定索引的元素即可
>>> a = [10,20,'lanting','shuxu'] # 创建一个列表对象
>>> a[0] = 100 # 修改第一个元素的值
>>> a
[100,20,'lanting','shuxu']

2.1.2、使用list()创建

使用 list()可以将任何可迭代的数据转化成列表。

1
2
3
4
5
6
7
>>> a = list() # 创建一个空的列表对象 []
>>> a = list(range(10)) # range(10) 是一个可迭代的对象,可从0到9迭代【详见下面补充部分】
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a = list("lanting,shuxu") # 迭代字符串
>>> a
['l', 'a', 'n', 't', 'i', 'n', 'g', ',', 's', 'h', 'u', 'x', 'u']

【补充:range()创建整数列表】
range()可以帮助我们非常方便的创建整数列表,这在开发中及其有用。语法格式为:
range([start,] end [,step])
start 参数:可选,表示起始数字。默认是 0
end 参数:必选,表示结尾数字。
step 参数:可选,表示步长,默认为 1
python3 中 range()返回的是一个 range 对象,而不是列表。我们需要通过 list()方法将其转换成列表对象。
典型示例如下:

1
2
3
4
5
6
>>> list(range(3,15,2)) # 从3开始到15步长为2的迭代器
[3, 5, 7, 9, 11, 13]
>>> list(range(15,3,-1)) # 从15开始到3的逆序步长为1的迭代器
[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4]
>>> list(range(3,-10,-1)) # 从3开始到-10的逆序步长为1的迭代器
[3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

2.1.3、推导式生成

使用列表推导式可以非常方便的创建列表,在开发中经常使用。但是,由于涉及到 for 循环和 if 语句。

1
2
3
4
5
6
>>> a = [x*2 for x in range(5)] # 循环创建多个元素
>>> a
[0, 2, 4, 6, 8]
>>> a = [x*2 for x in range(100) if x%9==0] # 通过 if 过滤元素
>>> a
[0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]

2.2、列表元素的增加和删除

当列表增加和删除元素时,列表会自动进行内存管理,大大减少了程序员的负担。但这个特点涉及列表元素的大量移动,效率较低。除非必要, 我们一般只在列表的尾部添加元素或删除元素 ,这会大大提高列表的操作效率。

2.2.1、append()方法

原地修改列表对象 ,是真正的列表尾部添加新的元素,速度最快,推荐使用。

1
2
3
4
>>> a = [20,40]
>>> a.append(80) # 尾部追加元素80
>>> a
[20, 40, 80]

2.2.2、“ + ”运算符操作或extend()函数

将原列表的元素和新列表的元素依次复制到新的列表对象中。其列表id不会变化

1
2
3
4
5
6
7
>>> a = [20,40]
>>> a = a + [80] # 使用 + 运算符从尾部追加一个列表
>>> a
[20, 40, 80]
>>> a.extend([10]) # 使用extend()函数从尾部追加一个列表
>>> a
[20, 40, 80, 10]

2.2.3、insert()插入元素

使用 insert()方法可以将指定的元素插入到列表对象的任意制定位置。这样会让插入位置后面所有的元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用。类似发生这种移动的函数还有:remove()、pop()、del(),它们在删除非尾部元素时也会发生操作位置后面元素的移动。

1
2
3
4
>>> a = [10,20,30]
>>> a.insert(2,100) 从索引为2的位置(第三个元素)插入元素100
>>> a
[10, 20, 100, 30]

2.2.4、乘法扩展

使用乘法扩展列表,生成一个新列表,新列表元素时原列表元素的多次重复。

1
2
3
4
5
6
>>> a = ['sxt',100]
>>> b = a * 3
>>> a
['sxt', 100]
>>> b
['sxt', 100, 'sxt', 100, 'sxt', 100]

适用于乘法操作的,还有:字符串、元组。例如:

1




    

2
3
4
5
6
>>> c = 'sxt'
>>> d = c * 3
>>> c
'sxt'
>>> d
'sxtsxtsxt'

2.2.5、使用 del 命令删除元素

使用del 删除列表指定位置的元素。如果不是删除最后一个元素,会导致列表的元素挪动。

1
2
3
4
>>> a = [100,200,888,300,400]
>>> del a[1] # 使用del命令删除
>>> a
[100,200,300,400]

2.2.6、使用pop()方法删除元素

pop()删除并返回 指定位置 元素,如果未指定位置则默认操作列表最后一个元素。

1
2
3
4
5
6
7
8
9
>>> a = [10,20,30,40,50]
>>> a.pop() # 删除并返回最后一个元素
50
>>> a
[10, 20, 30, 40]
>>> a.pop(1) # 删除并返回索引为1的元素
20
>>> a
[10, 30, 40]

2.2.7、使用remove()方法删除元素

删除首次出现的 指定元素 若不存在该元素抛出异常 。【与pop()方法不同在于,remove()删除的是指定的元素,而pop()删除的是指定索引的元素】

1
2
3
4
>>> a = [10,20,30,40,50,20,30,20,30]
>>> a.remove(20) # 删除a列表中第一次出现的20
>>> a
[10, 30, 40, 50, 20, 30, 20, 30]

2.3、列表元素访问和计数

2.3.1、通过索引直接访问元素

我们可以通过索引直接访问元素。索引的区间在[0, 列表长度-1]这个范围。超过这个范围则会抛出异常。

1
2
3
>>> a = [10,20,30,40,50,20,30,20,30]
>>> a[2] # 直接通过索引号获取
30

2.3.2、index()获得指定元素在列表中首次出现的索引

index()可以获取指定元素首次出现的索引位置。语法是:index(value,[start,[end]])。其中,start 和 end 指定了搜索的范围。

1
2
3
4
5
6
7
>>> a = [10,20,30,40,50,20,30,20,30]
>>> a.index(20) # 查找20在列表中第一次出现的索引
1
>>> a.index(20,3) #从索引位置 3 开始往后搜索的第一个 20
5
>>> a.index(30,5,7) #从索引位置 5 到 7 这个区间,第一次出现 30 元素的位置
6

2.3.3、count()获得指定元素在列表中出现的次数

count()可以返回指定元素在列表中出现的次数。因此可以使用count()函数来判断某个元素是否在列表中,count()统计结果为0表示不存在,否则为存在

1
2
3
>>> a = [10,20,30,40,50,20,30,20,30]
>>> a.count(20) # 统计20在列表中出现的次数
3

2.4、切片赋值

列表可以使用切片语法给列表批量赋值。

1
2
3
4
>>> name = list("lanting")
>>> name[2:] = list("shuxu") # 将从第三个开始到最后的列表内容修改为新列表
>>> name
['l', 'a', 's', 'h', 'u', 'x', 'u']

切片赋值可以是与原列表不同长度的列表。

1
2
3
4
>>> name = list("he")
>>> name[1:] = list("hello world") #将一个更长的元组赋值到列表中
>>> name # 我们可以看到赋值后列表被扩宽了
['h', 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

切片还可以在不替换原有元素的情况下 插入新元素

1
2
3
4
>>> number = [1,5]
>>> number[1:1] = [2,3,4] # 在1后面的空切片中插入一个列表
>>> number
[1, 2, 3, 4, 5]

上面代码中,我们“替换”了一个空的切片,也就 相当于插入了一个新元素 ,当然,也可以利用类似的措施来删除元素。

1
2
3
4
5
>>> number
[1, 2, 3, 4, 5]
>>> number[1:4] = [] # 将某个切片范围设置为空列表,也就相当于删除了目标列表
>>> number
[1, 5]

上述代码与 del nubmer[1:4] 等效

3、元组

与列表一样,元组也是序列,与元组的区别在于:元组是 不能被修改 的,元组的创建语法非常简单,只需要将一些值用逗号分隔,就自动创建一个元组。

1
2
3
4
5
>>> 1,2,3  # 使用逗号分隔,自动创建一个元组。
(1, 2, 3)

>>> (1, 2, 3) # 当然也可以用()括起来,一般这是我们创建的方式
(1, 2, 3)

特别地,创建元素只有一个的元组时,需要做点特殊处理。

1
2
3
4
5
6
>>> 42 # 当元组只有一个时,这样的创建方式会被识别为一个字面量
42
>>> 42, # 当只有一个元素时,我们需要额外在末尾增加一个逗号
(42,)
>>> (42,) # 括号中也是如此
(42,)

创建一个元素的时候不管是不是包含(),都应该在元素后面增加一个逗号。

1
2
3
4
>>> 3 * (40 +2 )  # 如果没有逗号,就被识别为算数运算符
126
>>> 3 * (40+2,) # 使用逗号将不再把括号中的表达式认为成算数运算
(42, 42, 42)

函数tuple

函数tuple()的工作原理与list很像,它将一个序列作为参数,并将其转换为元组,如果参数已经是元组,就原封不动地返回它。

1
2
3
4
5
6
>>> tuple([1,2,3])
(1, 2, 3)
>>> tuple("abc")
('a', 'b', 'c')
>>> tuple((1,2,3))
(1, 2, 3)

元组的切片操作,单个元素访问都与列表相同,只是元组不能修改内容而已。

1
2
3
4
>>> x = 1,2,3  # 创建一个元组
>>> x[1] # 取得第2个元素
2
>>> x[0:2] # 切片操作

缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save

3、在根目录_config.yml里添加配置: jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true
 
推荐文章