写在前面:

Python支持一种数据结构的基本概念,名为容器(container)。容器基本上就是可包含其 他对象的对象。两种主要的容器是序列(如列表和元组)和映射(如字典)。这次我们主要来了解一下 列表和元组。

在介绍这些之前,我先来给大家介绍一下所有的序列都有支持的以下操作:

序列

有几种操作适用于所有序列,包括索引、切片、相加、相乘和成员资格检查。另外,Python 还提供了一些内置函数,可用于确定序列的长度以及找出序列中大和小的元素,关于迭代会在以后介绍。

1.索引

序列中的所有元素都有编号——从0开始递增。你可像下面这样使用编号来访问各个元素:
例如:

def Test1():
    str1 = 'hello'
    print(str1[1])
    l1 = [1, 2, 3, 4]
    print(l1[2])


Test1()

python openpyxl sheet 名字_列表


注意:

字符串就是由字符组成的序列。索引0指向第一个元素,这里为字母h。不同于其他一些语言,Python没有专门用于表示字符的类型,因此一个字符就是只包含一个元素的字符串。

而在python 中还支持 (索引)下标为负数 的操作 例如:

python openpyxl sheet 名字_序列_02


这在python是被允许的操作 ,但是在其他C/C++就不允许,这种索引方式适用于所有序列。当你使用负数索引时,Python将从右(即从最后一个元素)开始往左数,因此 -1是后一个元素的位置,-3 也就是倒数第三个的位置。

另外序列的索引还可以被多种方式使用:

l1 = [1, 2, 3, 4]
    l1[3] = 9
    print(l1)# 对序列中的索引位置的值进行修改 
    print('hello'[3])# 直接打印出序列 'hello' 的索引为 3位置的值 无需再创建一个新的序列变量
    fourth = input("请输入: ")[3]##返回用户输入的第四个的值
    print(fourth)
2.切片

除使用索引来访问单个元素外,还可使用 “切片(slicing)” 来访问 "特定范围内 "的元素。为此, 可使用两个索引,并用冒号分隔:
这个切片也就是通过索引的分割来确定一个范围 由此对序列中的内容进行访问,修改等操作。
例如:

def Test2():
    str1 = "hello world!"
    print(str1[1:6])


Test2()

python openpyxl sheet 名字_序列_03


也就是对于序列,提供两个索引来指定切片的边界,其中第一个索引指定的元素包含在切片内, 但第二个索引指定的元素不包含在切片内。

[ 1: 6]也就是 包含了索引为 1 2 3 4 5 的五个元素。当然上述的 负索引也是支持的,同时还有一些下面的比较特殊的操作。

1. 索引的特殊使用方法:
def Test3():
    a = [1, 2, 3, 4, 5, 6, 7, 8]
    print(a[1:-2])# 切片也同样支持负索引的操作 但是也要注意正负索引不要超出序列的范围
    print(a[-4:-1])#打印最后三个元素 可以使用负索引来解决 非常的方便 当然还有以下的一些更为简洁的操作
    print(a[-4:])#打印最后四个元素 这里 可以省略第二个索引
    print(a[:3])#打印前三个元素 这里可以省略第一个索引
    print(a[:])#打印出整个序列


Test3()

python openpyxl sheet 名字_序列_04

2. 步长

其实在使用切片操作时,为了优化这个操作,这其中还有另外一个参数 “步长” 也就是 我们通过两个索引获取范围内的元素时 是按照一次递增一个的访问的 ,其实我么可以通过参数的设置,使其按一次间隔一个或n个的获取范围内的元素,例如:

def Test4():
    b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    print(b[0:10:2])
    print(b[1:10:2])
    print(b[0:10:3])


Test4()

python openpyxl sheet 名字_序列_05

注意:
步长不能为0,否则无法向前移动,但可以为负数,即从右向左提取元素。
当然如果是要从整个序列中j间隔n-1个地获取元素 也可以简写为 b[ : : n]

3.序列相加

可使用加法运算符来拼接序列,但是一般而言,不能拼接不同类 型的序列。

python openpyxl sheet 名字_序列_06

4.乘法

将序列与数x相乘时,将重复这个序列x次来创建一个新序列:

python openpyxl sheet 名字_序列_07

None、空列表和初始化
def Test6():
    a = []
    print(a)#一个空的序列
    b = [None]*10#使用 None 来初始化
    print(b)


Test6()

python openpyxl sheet 名字_赋值_08

5.成员资格

要检查特定的值是否包含在序列中,可使用运算符in

它检查是否满足指定的条件,并返回相应的值:满足时返回True不满足时返回False这样的运算符称为布尔运算符,而前述真值称为布尔值。

例如:

python openpyxl sheet 名字_元组_09

6.长度、最小值和最大值

内置函数len、min和max很有用,其中函数len返回序列包含的元素个数,而min和max分别返 回序列中小和大的元素

python openpyxl sheet 名字_赋值_10

一、列表:

列表是最常用的Python数据类型,有点像 c /c++中的数组 但是它与数组还有些不同,它可以作为一个方括号内的逗号分隔值出现。 例如:
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。

a = [1, 'f', 3]

其实在上述的序列的一些中我们可以体会到列表
通常具备以下几个特点:

列表由一系列按特定顺序排列的元素组成。
列表长度不确定。
列表中存储的元素类型可以不唯一。
列表中可以有重复元素。

1. 列表的基本操作
1. 修改列表:给元素赋值

如:

a = [1, 3, 4]
a[2] = 5#将索引为 2 的元素修改为 5

注意:
不能给不存在的元素赋值,因此如果列表的长度为2,就不能给索引为100的元素赋值。 要这样做,列表的长度至少为101

2. 删除元素

使用del语句即可。
如:

a = ['w', 1, 4]
del a[0] #即可删除第一个元素 且长度也会发生改变
3. 给切片赋值

例如:

python openpyxl sheet 名字_元组_11

l例如当给一个空的切片 如 a[1: 1] 相当于插入段数据 当把一段范围内的数据替换为 [ ]时也就相当于删除一段数据

2.列表方法

方法

方法介绍

append

将一个对象附加到列表末尾。

clear

就地清空列表的内容

copy

复制列表。

count

计算指定的元素在列表中出现了多少次

extend

将多个值附加到列表末尾

index

在列表中查找指定值第一次出现的索引

insert

将一个对象插入列表

pop

从列表中删除一个元素(末尾为后一个元素),并返回这一元素。

remove

删除第一个为指定值的元素。

reverse

按相反的顺序排列列表中的元素

sort

对列表就地排序①。就地排序意味着对原来的列表进行修改,使其元素按顺序 排列,而不是返回排序后的列表的副本

具体的请看代码演示:

#### 1.append 尾加一个数据
    numbers.append(6)
    print(numbers)#[1, 4, 5, 6]
    #### 2.clear清空
    print(numbers)#什么也没有
    #### copy
    a = [1, 2, 3]
    b = a.copy()
    print(b)#[1, 2, 3]
    #### count 计算一个元素出现的次数
    y = b.count(2)
    print(y)#1
    #### 相当于将整个 列表 b 附加到 a 后面  返回的是被追加的列表  但是使用 + 的话会返回一个新的 列表
    a.extend(b)
    print(a)#[1, 2, 3, 1, 2, 3]
    #### 6. index 方法index在列表中查找指定值第一次出现的索引 当不存在的时候会报错
    knights = ['We', 'are', 'the', 'knights', 'who', 'say', 'ni']
    temp = knights.index('who')
    print(temp)#4
    #### 7. insert 方法insert用于将一个对象插入列表。
    ##### objec.insert(pos,value)
    str1 = ["h", "e", "l", "o"]
    str1.insert(3, 'l')
    print(str1)#['h', 'e', 'l', 'l', 'o']
    #### 8. pop 方法pop从列表中删除一个元素(末尾为后一个元素),并返回这一元素
    ### python中没有 push 因此使用 pop 和 insert 或者 append 可以实现一个简单的 栈
    str1.pop()# l
    print(str1.pop())
    print(str1)#['h', 'e', 'l', 'l']
    #### 9. remove 方法remove用于删除第一个为指定值的元素。
    str2 = ['w', 'o', 'w', 'r', 'l', 'd']
    str2.remove('w')
    print(str2)#['o', 'w', 'r', 'l', 'd']
    #### 10. reverse 方法reverse按相反的顺序排列列表中的元素 修改列表但是不返回任何的值
    str2.reverse()
    print(str2)#['d', 'l', 'r', 'w', 'o']
    #### 11. sort 方法sort用于对列表就地排序①。
    #### 就地排序意味着对原来的列表进行修改,使其元素按顺序 排列,而不是返回排序后的列表的副本。
    arry = [1,5,7,342,43,37]
    #arry.sort()
    print(arry)##[1, 5, 7, 37, 43, 342]
    ###!!!! 注意上述的很多操作时没有返回值的 因此想要返回值的时候 可以先将其 使用 copy 出一个副本 对他的副本进行操作
    ## 再将其副本 返回即可如:
    arry2 = arry.copy()
    arry2.sort()
    print(arry2)## [1, 5, 7, 37, 43, 342]
    ### 但是直接赋值是不行的 比如 将 y = x这样 x y还是指向同一个列表 但是可以使用 sorted 如:
    arry3 = sorted(arry)
    print(arry)## [1, 5, 7, 342, 43, 37]
    print(arry3)##[1, 5, 7, 37, 43, 342]
    ### sorted 适合于所有的序列 返回的是一个列表
    #####12. 高级排序 方法sort接受两个可选参数:key和reverse
    arry4 = ["hr", "dka", "s", "sdgafkhl"]
    arry4.sort(key=len)
    print(arry4)##['s', 'hr', 'dka', 'sdgafkhl']
    arry5 = [-1, 0, 131, 34, 4]
    arry5.sort(reverse=True)##[131, 34, 4, 0, -1]
    print(arry5)

二、 元组

与列表一样,元组也是序列唯一的差别在于元组是不能修改的(你可能注意到了,字符串 也不能修改)。
元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组。

print(1, 2, 3)##元组还可以使用 ( ) 来进行创建
    print(3*(1, 2, 3))##(1, 2, 3, 1, 2, 3, 1, 2, 3)
    ##tuple 它将一个序列作为参数,并将其转换为元组
    arr6 = [1, 4, 7, 9, 34]
    print(tuple(arr6))##(1, 4, 7, 9, 34)

元组并不太复杂,而且除创建和访问其元素外,可对元组执行的操作不多。 元组的创建及其元素的访问方式与其他序列相同。
元组的切片也是元组,就像列表的切片也是列表一样。为何要熟悉元组呢?原因有以下两个。

它们用作映射中的键(以及集合的成员),而列表不行。映射将在以后详细介绍。
有些内置函数和方法返回元组,这意味着必须跟它们打交道。只要不尝试修改元组,与 元组“打交道”通常意味着像处理列表一样处理它们(需要使用元组没有的index和count 等方法时例外)。 一般而言,使用列表足以满足对序列的需求