文章题目
列表与列表推导式
目录
一、创建列表
- 列表的所有元素放在一对方括号中,相邻元素之间使用逗号分隔。在Python中,同一个列表中元素的数据类型可以各不相同,可以同时包含整数、实数、复数、字符串等基本类型的元素,也可以包含列表、元组、字典、集合、函数或其他任意对象。
- 一对空的方括号表示空列表。
list((3,5,7,9,11)) #将元组转换为列表 [3,5, 7, 9, 11]
list(range(1,10,2)) #将range对象转换为列表 [1,3, 5, 7, 9]
list(map(str,range(10))) #将map对象转换为列表['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
list(zip('abcd',[1,2,3,4])) #将zip对象转换为列表[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
#list(enumerate(Python)) #将enumerate对象转换为列表[(0,'p'), (1, 'y'), (2, 't'), (3, 'h'), (4, 'o'), (5, 'n')]
list(filter(str.isdigit,'a1b2c3d456')) #将filter对象转换为列表['1','2', '3', '4', '5', '6']
list('hello world') #将字符串转换为列表,每个字符转换为列中的一个元素 ['h','e', 'l', 'l', 'o',"', 'w', 'o', 'r', 'l', 'd']
list({3,7,5}) #将集合转换为列表,集合中的元素是无序的 [3,5,7]
x=list() # 创建空列表
x=[1,2,3]
del x #删除列表对象
二、使用下标访问列表中的元素
data=list(range(10))
print(data)
print(data[0]) #第一个元素的下标为0
print(data[1]) # 第二个元素的下标为1
print(data[-1]) #-1表示最后一个元素的下标
print(data[15]) #15不是有效下标,代码抛出异常
三、列表常用方法
方法 | 功能 |
lst.append(x) | 将x追加值列表lst尾部,不影响列表中已有元素的位置,也不影响列表在内存中 的起始地址 |
lst.insert(index,x) | 在列表lst的 index 位置处插入x,该位置之后的所有元素自动向后移动,索引加1 |
lst.extend(L) | 将列表L中的元素追加值列表lst的尾部,不影响 lst列表中已有元素的位置,也不 影响 lst列表在内存中的起始地址 |
lst.pop([index]) | 删除并返回列表 lst 中下标为index的元素,该位置后面的所有元素自动向前移动, 索引减1。index默认为-1,表示删除并返回列表中最后一个元素 |
lst.remove(x) | 在列表lst中删除第一个值为x的元素,被删除元素位置之后的所有元素自动向前 移动,索引减1;如果列表中不存在x,则抛出异常 |
lst.count(x) | 返回x在列表lst中的出现次数 |
lst.index(x) | 返回列表lst 中第一个值为x 的元素的索引,若不存在值为x 的元素,则抛出异常 |
lst.sort(key=None, reverse=false) | 对列表lst 中的元素进行原地排序,key 用来指定排序规则,reverse 为false 表示 升序,为true表示降序 |
lst.reverse(x) | 对列表lst 的所有元素进行原地逆序,首位交换 |
1.append()、insert()、extend()
lst =[1,2,3,4]
lst.append(5) #append是在列表尾部追加元素
lst.insert(0,0) #insert是在列表当中指定位置插入一个元素
lst.insert(2,1.5)
lst.extend([6,7]) #extend是把另外一个列表或可迭代对象当中的元素一次性追加到当前列表的尾部
print(lst)
2.pop()、remove()
lst =[1,2,3,4,5,6]
print(lst.pop()) #删除并返回最后一个元素
print(lst.pop(0)) #删除并返回下标为0的元素,后面的元素向前移动
print(lst.pop(2)) #删除并返回下标为2的元素,后面的元素向前移动
print(lst)
lst =[1,2,3,2,4,2]
lst.remove(2) #删除第一个2,该方法没有返回值
print(lst)
3.count()、index()
lst =[1,2,2,3,3,3,4,4,4,4]
print(lst.count(2)) #输出2 count是数一数该元素在当前列表出现了多少次
print(lst.index(4)) #输出6 index是用来返回一个元素在列表中位置的下标
print(lst.index(5)) #代码抛出异常,提示5 is not in list
4.sort()、reverse()
from random import sample
#在range(10000)中任选10个不重复的随机数
data=sample(range(10000),10)
print(data)
#reverse是用来将列表元素首位交换的
data.reverse() #翻转,首尾交换,该方法没有返回值
print(data)
#sort是用来对列表中的元素进行排序
data.sort() #按元素大小进行排序,该方法没有返回值
print(data)
data.sort(key=str) #按所有元素转换为字符串后的大小进行排序
print(data)
四、列表推导式
data = [2**i for i in range(64)]
等价于
data = [ ]
for i in range(64):
data.append(2**i)
data = [num for num in range(20) if num%2==1]
等价于
data = []
for num in range(20):
if num%2 == 1:
data.append(num)
data = [num for num in range(20)ifnum%2==11
等价于data = []
for num in range(20):
if num%2 == 1:
data.append(num)
from random import random
data =[[random() for j in range(5)] for i in range(3)]等价于
from random import random
data = []
for i in range(3):
temp = []
for j in range(5):
temp.append(random())data.append(temp)
五、切片操作
- 切片是用来获取列表、元组、字符串等有序序列中部分元素的一种语法。在形式上,切片使用2个冒号分隔的3个数字来完成。
[start:end:step]
- 其中第一个数字start表示切片开始位置,默认为0;第二个数字end表示切片截止(但不包含)位置(默认为列表长度);第三个数字step表示切片的步长(默认为1),省略步长时还可以同时省略最后一个冒号。
- 当step为负整数时,表示反向切片,这时start应该在end的右侧。
data=list(range(20))
print(data[:]) #获取所有元素的副本
print(data[:3]) #前三个元素
print(data[3:]) #下标3之后的所有元素
print(data[::3]) #每3个元素选取1个
print(data[-3:]) #最后3个元素
print(data[:-5]) #除最后5个元素之外的所有元素