# 一、序列

序列 是Python 中最基本的数据结构,它是一块用于存放多个值的连续内存空间,类似于Java 中的数组。

Python 中内置了五个常用的序列结构,分别是

  • 列表
  • 元组
  • 集合
  • 字典
  • 字符串

# 索引

序列的存储是按照一定殊勋进行排列的,每个值(或者元素)都分配了一个数字,称为索引。

类比java中的数组。 序列可以通过正数索引访问,也能通过复数索引访问。

  • 正数表示,从左到右的下标顺序
  • 负数表示,从右到左的下标顺序

# 切片

切片是访问序列中元素的一种方法,可以访问一定范围内的元素,通过切片操作可以生成一个新的序列,语法格式如下:

sname[start : end : step]
* sname : 序列名称
* start : 切片开始的位置,闭区间,不指定 默认:0
* end   : 切片结束的位置,开区间,不指定,默认为序列长度
* step  : 切片的步长,默认为:1。(步长=1表示一个个遍历,步长=2表示22个的遍历取值。。。。。)

小贴士:如何复制一个序列

sname[:] 该方式,默认截取从0到末尾的元素,相当于复制了该序列

# 序列相加

在 Python 中支持两种相同类型的序列相加,也就是两个序列的拼接(该拼接不会去除重复的元素)。 相同类型指的是同为列表、元组、集合等。

例如:

num = [7,14]
name = ['a','']
print(num + name) // 正确

##############################
num = [7,14]
print(num + "测试") // 报错:TypeError: can only concatenate list (not 'str') to list

# 序列乘法

在 Python 中,使用数字 n 乘以一个序列生成一个新的序列。新序列的内容为原来序列被重复n次的结果。

name = ['a','b']
print(name * 3) // 结果为:['a','b','a','b','a','b']

该方式可以实现初始化指定长度列表的功能

emptylist = [None] * 5 // 初始化一个长度为 5 的列表,每个元素默认为:None

# 检查元素是否是序列的成员

可以使用关键 in 检查某个元素是否为序列中的成员,语法格式:

value in sequence
* value 要检查的元素
* sequence 序列
num = [7,14]
print(7 in num) // True
print(7 not in num) // False

# 计算序列的长度、最大值和最小值

在 Python 提供了内置函数计算序列的长度、最大值和最小值。

  • len() : 序列的长度
  • max() : 序列的最大值
  • min(): 序列的最小值
num = [7,1,3,19]
print("len:",len(num)) // 序列长度
print("max:",max(num)) // 序列最大值
print("min",min(num)) // 序列最小值

其他内置函数:

  • list():将序列转换为列表
  • str():将序列转换为字符串
  • sum() :计算元素和
  • sorted():对元素进行排序
  • reversed() :反向序列中的元素
  • enumerate():将序列组合成一个索引序列,多用于 for 循环

# 二、列表

列表属于序列中的一种,也就是说序列的特性,列表也同样具有

Python 中的列表有一系列按特定顺序排列的元素组成。它是 Python 中内置的可变序列。

形式上:列表的所有元素都放在一对中括号“[]” 中,两个相邻的元素间使用逗号“,” 分隔。

在内容上:一个列表中的元素可以是不同的类型,可以是整数、实数、字符串、列表、元组等任何类型的元素。

# 1、列表的创建和删除

# 通过赋值直接创建列表

name = ['name','name2','name3']
other = ['name',1,['a','b']]

# 创建空列表

emptylist = []

# 创建数值列表

# 创建一个 1~20之间,所有偶数的列表,
list(range(10,20,2))

# 删除列表

小贴士:再删除之前,一定要确定被删除的列表名称已经存在,否则会报错 NameError: name 'xxx' is not defined

name = ['name1','name2']
del name # 删除列表

# 2、访问列表元素

name = ['name1',2,'name2',3]
print(name) # 输出结果 ['name1',2,'name2',3],直接输出整个列表

print(name[0]) # 删除结果 name1 ,按照索引访问元素

# 3、遍历列表

# for 循环

## 格式如下
## for item in listname:
##     输出item
##

name = ['name1',1,'name2',2]
for item in name:
    print(item)

# for 循环 + enumerate()

## 格式如下
######################################
## for index,item in enumerate(listname)
##    # 输出 index 和 item
#######################################
# * index 用于保存元素的索引
# * item 用户保存获取到的元素值
# * listname 列表名

name = ['name1',1,'name2',2]
for index,item in enumerate(name):
    print(index + 1,item)

# 3、增删改列表元素

# 往后添加元素

## 格式
## listname.append(obj)
## 也可以直接使用 + ,不过效率没有 append 高

name = ['name1','name2']
name.append('name3')

# 根据索引插入元素

## 格式
## listname.insert(index,obj)

name = ['name1','name2']
print(name)
name.append('name3')
print(name)
name.insert(3,'name4')
print(name)
name.insert(0,'name0')
print(name)

## 结果如下
['name1', 'name2']
['name1', 'name2', 'name3']
['name1', 'name2', 'name3', 'name4']
['name0', 'name1', 'name2', 'name3', 'name4']

# 将整个列表添加到某个列表中

## 格式
## listname.extend(seq)
## * listname 愿列表
## * seq 要添加的列表

## 列表 extend

name1 = ['name1']
name2 = [1,2,3,4]
name1.extend(name2)
print(name1)
## 结果如下
['name1', 1, 2, 3, 4]

# 修改元素

## 列表修改
name1 = ['name1','name2','name3']
print(name1)
name1[1] = 2
print(name1)

## 结果
['name1', 'name2', 'name3']
['name1', 2, 'name3']

# 删除元素

name = ['name1','name2','name3','name4','name5']
## 根据索引删除
del name[0]
print(name)

## 根据名称删除
name.remove('name2') ## 如果元素不存在会报错
print(name)

## remove 使用的正确方式,先判断,count() 表示某个元素出现的次数
if name.count('name3') > 0:
    name.remove('name3')
print(name)

## 结果
['name2', 'name3', 'name4', 'name5']
['name3', 'name4', 'name5']
['name4', 'name5']

# 4、统计和计算

# 元素出现次数

## 元素出现次数
name = ['name1','name2','name3','name2','name2']
print(name.count('name2')) ## 精确匹配,不能模糊匹配

## 结果
3

# 元素首次出现的下标

## 元素首次出现的下标
name = ['name1','name2','name3','name2','name2']
print(name.index('name2'))

## 结果
1

# 元素求和

## 格式
## sum(iterable[,start])
## * sum() 求和函数
## * iterable 求和列表
## * start 列表开始的元素位置

## 列表求和
age = [1,2,3,4,5]
print(sum(age))

# 5、排序

# 列表对象的 sort() 方法:排序改变原列表

## 格式
## listname.sort(key=None,reverse=False)
## * listname 【必填】要进行排序的列表
## * key 【可选】表示从每个元素中提取一个用于比较的键(如:key=str.lower,表示排序不区分大小写)
## * reverse 【可选】 True 降序,False 升序,默认:False-升序

grade = [1,2,3,10,100,30,20,15]
grade.sort() # 升序排序
print("升序:",grade)
grade.sort(reverse=True) # 降序排序
print("降序:",grade)

## 结果
升序: [1, 2, 3, 10, 15, 20, 30, 100]
降序: [100, 30, 20, 15, 10, 3, 2, 1]
##############################################
## 对字母的排序,采用先对大写字母排序,在对小写字母排序,可以通过 key=str.lower 指定排序不区分大小写
## 排序对中文不友好
name = ['cat','Tom',"Angela",'pet']
name.sort() # 默认排序:先大写,后小写
print(name)
name.sort(key=str.lower) # 排序,不区分大小写
print(name)

## 结果
['Angela', 'Tom', 'cat', 'pet']
['Angela', 'cat', 'pet', 'Tom']

# 内置 sorted() 函数:排序不改变原列表

## 格式
## sorted(iterable,key=None,reverse=False)
## * 【必填】iterable 进行排序的列表名称
## * 【可选】key 表示从每个元素中提取一个用于比较的键(如:key=str.lower,表示排序不区分大小写)
## * 【可选】 reverse True 降序,False 升序,默认:False-升序

grade = [1,2,3,10,100,30,20,15]
grade_as = sorted(grade) # 升序排序
print("升序:",grade_as)
grade_des =sorted(grade,reverse=True) # 降序排序
print("降序:",grade_des)
print("原列表:",grade)
## 结果
升序: [1, 2, 3, 10, 15, 20, 30, 100]
降序: [100, 30, 20, 15, 10, 3, 2, 1]
原列表: [1, 2, 3, 10, 100, 30, 20, 15]

# 6、列表推导式

使用列表推导式快速生成一个列表,或者根据某个列表生成满足指定需求的列表。

# 语法一:

## 格式
# list = [Expression for var in range]
# * list 生成的列表名称
# * Expression 表达式,用于计算新列表的元素
# * var 循环变量
# * range 采用 range() 函数生成的对象

## 生成10个随机数列表,随机数取值在 10~100,
import random
randomnumber = [random.randint(10,100) for i in range(10)]
print(randomnumber)

# 语法二

## 格式
# newlist = [Expression for var in list]
# * newlist 生成的列表名称
# * Expression 表达式,用于计算新列表的元素
# * var 循环变量
# * range 采用 range() 函数生成的对象
# * list 用于生成新列表的原列表

## 针对原价格进行打折处理
price = [100,200,60,20]
sale = [int(x*0.5) for x in price]
print(sale)

# 语法三

## 格式
# newlist = [Expression for var in list if condition]
# * newlist 生成的列表名称
# * Expression 表达式,用于计算新列表的元素
# * var 变量,值为后面列表的每个元素值
# * list 用于生成新列表的原列表
# * condition 条件表达式,用户指定筛选条件

## 找出价格大于 50 元所有价格
price = [100,200,50,30,20]
sale = [x for x in price if x > 500]
print("原列表:",price)
print("价格高于50的列表:",sale)

# 7、二维列表

在 Python 中列表中可以放入列表数据,所以它也支持二维列表。

# 创建二维列表

  • 直接定义二维列表

    ## 格式
    ## listname = [
    ##             [元素11,元素12,元素13,元素14,元素15],
    ##             [元素21,元素22,元素23,元素24,元素25],
    ##             [元素35,元素36,元素37,元素38,元素39]
    ##            ]
    
  • 使用嵌套 for 循环创建

    ## 案例:
    arr = [] # 创建一个空列表
    for i in range(4):
        arr.append([]) # 在空列表中添加一个空列表
        for j in range(5):
            arr[i].append(j) # 为内层列表添加元素
    
  • 使用列表推导式创建

    # 案例
    arr = [[j for j in range(5)] for i in range(4)]
    ## 结果:[
    ##        [0,1,2,3,4],
    ##        [0,1,2,3,4],
    ##        [0,1,2,3,4],
    ##        [0,1,2,3,4]
    ##       ]
    
最近更新时间: 7/12/2020, 9:23:38 PM