列表
列表是python中内置有序可变序列,所有元素放在[]中,每个元素使用逗号隔开
创建列表
- list1 = ['鲁班','安琪拉','狄仁杰',['科比','乔丹','詹姆斯'],111,99.9]
列表的访问
列表名[index]
print(list1[3])
print(list1[3][1])
查看列表里的元素个数
- print(len(list1))
列表的添加
- append 向列表的尾部增加一个元素,不改变其内存首地址,属于原地操作
list1.append(['1','2','3'])
print('添加后列表的值是:',list1)
- insert(index, object) 向列表任意位置插入一个元素,不改变内存首地址,属于原地操作
list1.insert(3,'今天天气还不错')
print('insert添加后列表的值是:',list1)
- extend() 将另一个迭代对象的所有元素添加至该列表对象尾部,不改变内存首地址,属于原地操作
list1.extend([3,4,5])
print('extend添加后列表的值是:',list1)
列表的 + 和 * 操作
' + ' 是连接两个列表
' * '是复制列表
- 这两个操作并不是真的为列表添加元素,而是创建一个新的列表,不属于原地操作,返回的是新的列表
x = [1, 2, 3]
y =x + [4]
print(y)
y = x*2
print(y)
-
列表元素的删除
pop( ): 使用列表的pop方法删除并返回指定(默认是最后一个位置的元素,如果给出的索引超过了list的范围则会抛出异常)位置的元素,如果给出的索引超过了list的范围则会抛出异常
x = [1,2,3,4]
value = x.pop(1)
print(value)
x.pop()
print('删除后的x:',x)
remove: 删除首次出现的指定元素,如果列表中不存在要删除的元素,则抛出异常
x = [1,2,2,3,4]
x.remove(2)
print('remove删除后',x)
clear() 清空列表
x = [1,2,2,3,'4']
x.clear()
print(x)
del: 删除列表中的指定位置元素,如果列表超出索引范围,则抛出异常
del 列表[index]
del x[5]
print(x)
- 列表元素的次数
x = [1,2,2,3,'4']
count 统计指定元素在列表中出现的次数
print(x.count(2))
print(x.count('4'))
print(x.count(0))
- index() 获取指定元素首次出现的下标,若列表对象中不存在指定元素,则抛出异常 左闭右开
print(x.index(2))
print(x.index(2,2,4))
- in 测试列表是否含有该元素 返回bool类型
print(4 in x)
print(2 in x)
print(4 not in x)
列表的排序
- 列表的内置方法: 列表名.sort()
list1 = [ ]
for x in range(0,15):
list1.insert(0,x)
print(list1)
- 打乱顺序
from random import shuffle
shuffle(list1)
print('打乱顺序后:',list1)
- 排序
list1.sort()
print('排序后:',list1)
list1.sort(reverse=True)
print(list1)
- revers(): 将列表的所有元素原地逆序排序
list1.reverse()
- sorted() : 内置函数sorted对列表进行排序并且返回新的列表,不对原来列表进行修改
list1 = sorted(list1)
print('排序后',list1)
- reversed() : 返回一个逆序排序后的迭代对象,不对原来列表做修改
list1 = reversed(list1)
print(list1)
用于序列(列表、元组、字符串)操作的常用内置函数
- len() : 返回序列中元素的个数 元组/列表、字典、集合
x = [1,2,3]
print(len(x))
- max min : 返回列表中最大或最小元素 同样适用于元组、列表、字典、集合
print(max(x))
print(min(x))
- sum : 对迭代对象进行求和运算
print(sum(x))
- zip() : 返回可迭代的zip对象,常常用于同时迭代两个列表
heros = ['鲁班','后弈']
skills = ['无敌鲨鱼炮','惩戒之箭']
for hero,skill in zip(heros,skills):
print(hero,'------------->',skill)
a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b)
print(zipped)
print(list(zipped))
print(list(zip(a,c))) # 元素个数与最短的一致
- zip(*) : 可以理解为解压,返回二维矩阵
a1,a2 = zip(*zip(a,b))
print(list(a1))
print(list(a2))
- enumerate # 枚举 l列表元素,返回枚举对象,其中每个元素包含下表和元素本身的一个元组
for x in enumerate('abcdef'):
print(x)
for x in enumerate('a','b','c'):
print(x)
遍历列表的三种方式
l1 = ['a','b','c','d','e']
for x in l1:
print(x)
for i in range(len(l1)):
print(l1[i])
for index,val in enumerate(l1):
print(val)
列表推导式
列表推导式使用非常简洁的方式来快速生成满足特定需求的列表,代码具有非常强的可读性。
- 语法
[返回表达式 for 临时变量 in 可迭代对象 条件表达式]
列表推导式 逻辑上是一个for循环, 只不过更加简洁
li = [0,1,......9]
li = []
for i in range(10)
li.append(i)
print(li)
# [返回表达式 for 临时变量 in 可迭代对象 条件表达式]
print([i for i in range(10)])
# 列表嵌套
L = [[1,2,3],[4,5,6],[7,8,9]]
# 平铺这个列表
result = []
for l in L:
for x in l:
result.append(x)
print(result)
print('--'*20)
print(result)
- 使用列表推导式对列表进行平铺
print([x for l in L for x in l])
# 过滤不符合条件的元素
# [返回表达式 for 临时变量 in 可迭代对象 条件表达式]
from random import randint # 生成给定范围的随机数
# _ 下划线的目的是增强代码的可读性,告诉读代码的人这里不需要使用临时变量
l2 = [randint(-20,20) for _ in range(10)]
print(l2)
# 使用列表推导式 筛选出所有大于零的元素
print([elem for elem in l2 if elem > 0])