Python基础(4)列表及常用操作

列表(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')]

6.其它常用操作

(1)len(列表):列表长度
(2)if 数据 in 列表:检查列表中是否包含某元素
(3)列表.sort():升序排列
(4)列表.sort(reverse = True):降序排列
(5)列表.reverse():逆序,反转
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章