python之列表介绍

1. 序列(sequence)

1.1 基本概念

定义:指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值**所在位置的编号(称为索引)**访问它们。
举例:将序列看做是一家旅店,那么店中的每个房间就如同序列存储数据的一个个内存空间,每个房间所特有的房间号就相当于索引值。也就是说,通过房间号(索引)我们可以找到这家旅店(序列)中的每个房间(内存空间)。

1.2 分类

可变序列:序列中的元素可以改变。如列表(list)字典(dict)
不可变序列:序列中的元素不可以改变。如 字符串(str)元组(tuple)

1.3 序列索引

来源于网址什么是序列,Python序列详解(包括序列类型和常用操作)

  • 序列中,每个元素都有属于自己的编号(索引)。从起始元素开始,索引值从 0 开始递增。
    在这里插入图片描述
  • Python 还支持索引值是负数,此类索引是从右向左计数,换句话说,从最后一个元素开始计数,从索引值 -1 开始,如图 2 所示。
    在这里插入图片描述

2.列表(list)

2.1 基本概念

列表是Python中的一个对象
列表的作用

  • 列表中可以保存多个有序的数据
  • 列表是用来存储对象的对象

2.2 列表的创建

创建列表 通过[]来创建列表
一个列表当中可以存储多个元素,也可以在创建列表的时候,指定列表当中的元素
当列表当中添加多个元素要用 , 隔开
列表可以存储任意对象,如函数,字符串,整数型,变量等

list_a = []  # 创建一个空列表
list_b = [1,2,3,4]  #创建一个数字列表
list_c = ['a','b','c','d']  #创建一个字符串列表
list_d =  ['A','B',1,'E,2,4]  #创建一个混合列表
list_e = [1,'python',None,True,[1,2,3]] #创建一个混合列表

2.3 列表的索引

如上所述,列表的索引就是列表中元素的位置或者序号。从零开始,可以为正,也可以为负。具体而言:

  • 我们可以通过索引(index)来获取列表当中的元素
  • 索引就是元素在列表当中的位置 索引从0开始,列表的第一个位置是0 第二个是1 以此类推
  • 获取列表的长度,用函数len(list) ,是列表的最大索引值+1
  • 索引可以是负数,如果索引是负数 则从后向前获取元素 -1表示倒数第一个 -2表示倒数第二个 以此类推。
list_ex = [1,2,3,4,5]
print(list_ex[0])  # print出1
print(list_ex[1])  # print出2
print(list_ex[-1])  # print出5
print(list_ex[-5])  # print出1
print(list_ex[-6])  # print出# IndexError: list index out of range 超出最大索引范围
print(list_ex[5])  # print出# IndexError: list index out of range 超出最大索引范围

2.4 列表的切片

• 切片是指从现有列表中获得一个子列表
• 通过切片来获取指定的元素
语法: 列表[起始 : 结束 : 步长]

• 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素
• 起始位置和结束位置的索引可以不写
• 如果省略结束位置, 则会从当前的开始位置一直截取到最后
• 如果省略开始位置, 则会从第一个元素截取到结束的元素,但是不包括结束的元素
• 如果开始位置和结束位置都省略, 则则会从第一个元素开始截取到最后一个元素
• 步长表示每次获取元素的间隔,默认是1(可以省略不写)
• 步长不能是0,但可以是是负数
注意:做列表切片时,得到或返回的是一个新的列表,不会影响原有列表

hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']  # 创建hero列表
print(hero[0:2])
print(hero[0:])
print(hero[:2])  # 从0开始,取到3前
print(hero[:])
print(hero[-2:])  # 取倒数两个
print(hero[::-1])  # 列表反转过来
print(hero[::-2])  # 列表反转过来,并取反转过来的间隔为2的项目
print(hero[1:5:2])  # 列表索引的1到5,不包括5,间隔为2进行切片取值
print(hero[1:5:-2])  # 空列表

在这里插入图片描述

3 列表通用操作

3.1 + 和 *

'''
+ 和 *
# +表示可以将2个列表拼接成一个列表
# *将列表中的元素指定重复的次数
'''
list_a = [1,2,3]
list_b = [2,3,4]
list_c = ['a','b','c']
list_d = list_a + list_b + list_c  # 合并a,b,c列表
list_e = list_a * 3  # 重复三次
list_f = list_c * 3  # 重复三次
list_g = list_a * -1 # 空列表
list_h = list_c * -1 # 空列表
list_i = list_a * -2 # 空列表
list_j = list_c * -2  # 空列表
print(list_d,list_e,list_f,list_g,list_h,list_i,list_j)

在这里插入图片描述

3.2 in 和 not in

'''
# in 和 not in
# in 表示用来检查指定元素是否在列表当中,如果在返回True,如果不在返回False
# not in  表示用来检查指定元素是否不在列表当中,如果不在返回True,如果在返回False
'''

hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']  # 创建hero列表
print('钢铁侠' in hero)  # 返回True
print('钢铁侠' not in hero)  # 返回False

3.3 列表常用函数

方法和函数的区别
方法必须通过 对象.方法() xxx.yyy()
函数 直接 zzz()

在这里插入图片描述

hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']  # 创建hero列表
print(len(hero))
print(min(hero))
print(max(hero))
name = "Sarch"
name_list = list(name)
print(name_list,num_str)
print(sum(num))
print(sorted(hero))
print(reversed(hero))  #反转hero
print(enumerate(hero))

在这里插入图片描述

3.4 调用列表方法

3.4.1 索引位置index、计算元素count

# s.index(x[, i[, j]]) # 获取指定元素在列表当中的位置
# 第二个参数 表示查找的起始位置 表示查找的介绍位置
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','绿巨人','绿巨人','美国队长']  # 创建hero列表
print(hero.index('绿巨人'))
print(hero.index('绿巨人',3))
print(hero.index('绿巨人',3,7))

# s.count(x) 统计指定元素在列表中出现的次数
print(hero.count('蝙蝠侠'))

3.4.2 添加元素append、插入元素insert、拓展元素extend

  • append() 向列表最后添加一个元素
hero = ['钢铁侠','绿巨人','蜘蛛侠']
print('修改前',hero)
hero.append('雷神')

  • insert(参数一,参数二) 向列表指定位置插入一个元素 参数一 要插入的位置 参数二 要插入的元素
hero = ['钢铁侠','绿巨人','蜘蛛侠']
print('修改前',hero)
hero.insert(1'雷神') # 插入到索引1的位置
  • extend 使用新的序列来扩展当前的序列
hero = ['钢铁侠','绿巨人','蜘蛛侠']
print('修改前',hero)
hero.extend(123) TypeError: 'int' object is not iterable
hero.extend(['黑寡妇','蚁人'])
hero += ['黑寡妇','蚁人']
print('修改后',hero)

3.4.3 清除列表clear,移除元素remove,丢弃元素pop

  • clear() 清空列表
hero = ['钢铁侠','绿巨人','蜘蛛侠']
hero.clear()
print('修改后',hero)

pop() 根据索引删除并返回指定的元素

hero = ['钢铁侠','绿巨人','蜘蛛侠']
result = hero.pop(1)  # 得到result = '绿巨人'
print('result = ',result)
hero.pop() # 如果不穿索引值就删除最后一个元素
hero.pop(1) #删除绿巨人
  • remove() 删除指定值的元素
  • 如果相同值的元素有多个,只会删除第一个
hero = ['钢铁侠','绿巨人','蜘蛛侠']
hero.remove('绿巨人')

3.4.4 反转列表reverse,排序列表sort,

  • reverse() 用来翻转列表
hero = ['钢铁侠','绿巨人','蜘蛛侠']
hero.reverse()  # ['蜘蛛侠','绿巨人','钢铁侠']
  • sort() 用来对列表中的元素进行排序
lst = list('adebc')
print('修改前',lst)
lst.sort(reverse=False) # 顺序  abcde
print('修改后',lst)
lst.sort(reverse=True) # 逆序  edcba
print('修改后',lst)
#
# print('修改后',lst)

3.5 修改列表的方法

hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print('修改前',hero) # ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
hero[0] = '雷神'
print('修改后',hero)  # ['雷神', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
  • 通过del 删除元素
del hero[2] #删除索引为2的蜘蛛侠
print('修改后',hero)  # ['雷神', '绿巨人', '黑寡妇', '蚁人', '美国队长']
  • 通过切片来修改列表
hero = ['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
hero[0:3] = 'abcd' # 在替换索引3前的元素
print('修改后',hero)  # ['a', 'b', 'c', 'd', '黑寡妇', '蚁人', '美国队长']
# 在给切片进行复制 必须传递一个序列
# hero[0:2] = 123 # TypeError: can only assign an iterable
# print('修改后',hero)  #
hero[0:2] = ['黑豹','雷神','灭霸']  # 替换索引为2前的元素
print('修改后',hero)  # ['黑豹', '雷神', '灭霸', 'c', 'd', '黑寡妇', '蚁人', '美国队长']

# 向索引为0的位置插入元素
hero[0:0] = ['雷神']
print('修改后',hero)  # ['雷神','黑豹', '雷神', '灭霸', 'c', 'd', '黑寡妇', '蚁人', '美国队长']
  • 步长方式的替换
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print(hero[::2])
# 当设置了步长时,序列中元素的个数必须和切片中元素的个数一致
hero[::2] = ['黑豹','雷神','灭霸']
print('修改后',hero)  # ['黑豹', '绿巨人', '雷神', '黑寡妇', '灭霸', '美国队长']
hero[::2] = ['黑吧'] * 3
print('修改后',hero)  # ['黑吧', '绿巨人', '黑吧', '黑寡妇', '黑吧', '美国队长']
  • 可以通过切片来删除元素
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print('修改前',hero)
# 可以通过切片来删除元素
hero[1:3] = []
print('修改后',hero) # ['钢铁侠', '黑寡妇', '蚁人', '美国队长']

4 遍历列表

  • 语法
    for 变量 in 序列(遍历的规则):
    代码块
# 语法
# for 变量 in 序列(遍历的规则):
#     代码块
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','灭霸']
for s in hero:
    print(s)

在这里插入图片描述

5 range函数

range(start,stop,step)
start 开始 计数从start开始默认从0开始 例如 range(5) 等价于 range(0, 5)
stop 结束 计数从stop结束 但是不包括stop 例如 range(0,5)结果 [0, 1, 2, 3, 4]没有5

# step  步长 默认为1  例如 range(5) 等价于 range(0, 5) 等价于range(0,5,1)
lit = [1,2,3,4,5,6,7,8,9]

获取列表当中的奇数
for i in range(0,9,2):

    print(lit[i])

for i in range(5):
    print(i)

在这里插入图片描述

6 列表练习

6.1 复习知识点

'''
基本操作
'''
a = [1,2,3,4,5]
print(a[1:3]) # 切片取得2和3
print(a[-1:-3])  # 切片取得4,5
0 not in a
'''
常用函数
'''
print(len(a))  # 列表长度
print(min(a))  # 最小值
print(max(a))  # 最大值
sorted(a,reverse=True) #逆序排列
print(a)

'''
调用方法
'''
a.index(1)  # 元素1出现的次数
a.count(0)  # 计算0元素出现的次数
a.append(6) # 补充元素6
print(a)
a.extend([9,10]) #补充列表[9,10]
print(a)
a.pop(0)  # 丢弃元素 # 0这里是索引
print(a)
a.remove(2)  # 丢弃元素2 # 2这里是元素
print(a)
a.clear() #  整个列表都删除
print(a)
'''
列表修改
'''
a = [1,2,3,4]
a[0] = -1  #索引值修改
print(a)
a[0:2] = 'ab'  #切片修改
print(a)

6.2 其他练习

现在有 a = [1,2,3,4,5,6] 不通过函数的形式实现列表的反转([6,5,4,3,2,1]) 并写出推导过程

函数实现的话:
# sorted(a,reverse=True)
# a.sort(reverse = True)
# 方法1 切片
a = a[::-1]
# 方法2 调用pop方法
b = []
for i in a:
	c = a.pop()
	b.append(c)


发布了11 篇原创文章 · 获赞 0 · 访问量 332

猜你喜欢

转载自blog.csdn.net/Claire_chen_jia/article/details/105603263