列表(list)
1.创建列表
(1).直接创建
number = [1,2,3,4,'你好']
(2).通过list()创建,开发过程中常用来进行其他数据类型向列表数据的强制转换
a = list(range(10,20,2))
print(a)
结果:
[10, 12, 14, 16, 18]
(3).通过表达式创建列表,语法结构[数学表达式 条件1 条件2 条件3…]
list1 = [x ** 2 for x in range(1,9) if x&1 == 0]
print(list1)
结果:
[4, 16, 36, 64]
(4).生成器
在编程中,我们有时需要生成一个列表,但是该列表可能占据大量的内存,此时列表直接加载到内存中就不再可取了,python提供一个列表生成器,列表生成器是一段生成对应列表的算法。
优点: 节省内存; 提高程序运行效率.
列表生成器每一次迭代,生成器产生的对应的数会被回收。
列表生成器的两种写法:
将列表的 [ ] 改成 ()
下面是一个列表:
a = [x for x in range(10)]
print(type(a))
结果:
<class 'list'>
此时,将 [ ] 改成 ()
a = (x for x in range(10))
print(type(a))
结果:
<class 'generator'>
遍历可以查看a的所有值,但当你将a的所有值遍历一遍后,a对应的列表就会被销毁。
for i in a:
print(i)
除了用遍历查看a的值外,还可以用next( a )来查看a的值,next( a )查看a的值每次只能查看一个,从0开始,到9结束,当再次执行next( a )时返回stoplteration。
比如下列代码:
a = (x for x in range(10))
print(type(a))
print(next(a))
结果:
<class 'generator'>
0
当多添加几个print(next(a))时,就会接着往下生成数据,如下:
a = (x for x in range(10))
print(type(a))
print(next(a))
print(next(a))
print(next(a))
结果:
<class 'generator'>
0
1
2
当最后一个数字9生成以后,再执行print(next(a))时,返回stoplteration。
将函数转化为列表生长器 yield
def foo():
print("starting...")
while True:
res = yield 4
print("res:",res)
g = foo()
print(next(g))
print("*"*20)
print(next(g))
结果:
starting...
4
********************
res: None
4
解释:
1.程序开始执行以后,因为foo函数中有yield关键字,所以foo函数并不会真的执行,而是先得到一个生成器g(相当于一个对象)
2.直到调用next方法,foo函数正式开始执行,先执行foo函数中的print方法,然后进入while循环
3.程序遇到yield关键字,然后把yield想想成return,return了一个4之后,程序停止,并没有执行赋值给res操作,此时next(g)语句执行完成,所以输出的前两行(第一个是while上面的print的结果,第二个是return出的结果)是执行print(next(g))的结果
4.程序执行print("*"20),输出20个
5.又开始执行下面的print(next(g)),这个时候和上面那个差不多,不过不同的是,这个时候是从刚才那个next程序停止的地方开始执行的,也就是要执行res的赋值操作,这时候要注意,这个时候赋值操作的右边是没有值的(因为刚才那个是return出去了,并没有给赋值操作的左边传参数),所以这个时候res赋值是None,所以接着下面的输出就是res:None,
6.程序会继续在while里执行,又一次碰到yield,这个时候同样return 出4,然后程序停止,print函数输出的4就是这次return出的4.
2.增
有append()、extend()和insert()三种方法
(1).append() 将元素添加到列表末尾
number = [0,1,2,3,4]
number.append(5)
print(number)
结果:
[0, 1, 2, 3, 4, 5]
(2).extend()方法可以添加多个元素,但是必须以列表的形式添加
number = [0,1,2,3,4]
number.extend([5,6])
print(number)
结果:
[0, 1, 2, 3, 4, 5, 6]
(3).前两种方法均将元素添加到列表末尾,如果想插队的话就需要使用insert()方法了
number = [0,1,2,3,4]
number.insert(2,1)
print(number)
结果:
[0, 1, 1, 2, 3, 4]
insert(2,1)中2指位置,1是需要添加的元素(列表第一个元素所在位置为0)。
3.删
列表中删除元素一共有remove()、del和pop()三种方法
(1).remove():需要知道列表中已经存在的元素,这样才可以实现元素的删除
number = ['罗','思','洋']
number.remove('罗')
print(number)
结果:
['思', '洋']
(2).当我们需要删除指定位置的元素时,就需要使用del方法
number = ["罗",'思','洋']
del number[0]
print(number)
del后直接跟列表名可以删除整个列表。
(3).pop()方法可以弹出元素,若无指定索引值作为参数时默认弹出最后一个元素
number1 = ["罗",'思','洋']
print(number1.pop())
number2 = ["罗",'思','洋']
print(number2.pop(0))
print(number1)
print(number2)
结果:
洋
罗
['罗', '思']
['思', '洋']
使用三种方法都可以实现元素的删除。
4.改
根据下标修改
number = ["罗",'思','洋']
number[0] = 5
print(number)
结果:
[5, '思', '洋']
5.查
(1).索引
fruits=['apple','peach','Lemon','Pear','Banana','watermelon']
print(fruits[0:2])
结果:
['apple', 'peach']
也可以输入单个索引值查询一个元素
(2).for遍历查询
for i in team:
print(i)
或者:
team = ['火箭','勇士','开拓者','爵士','鹈鹕','马刺','雷霆']
for index,item in enumerate(team):
print(index + 1,item)
结果:
1 火箭
2 勇士
3 开拓者
4 爵士
5 鹈鹕
6 马刺
7 雷霆
补充enumerate():枚举,输出下标及值
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons))
输出:
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]