我想当第一

本节内容:

一.列表的定义+基本操作

列表是一组有序的数据的组合,列表中的数据可以被修改

列表的定义:
1.可以使用中括号定义[]
2.可以使用list函数定义
3.在定义时,需要在每个元素之间使用逗号进行分割
4.列表中的元素可以是任意类型的,通常是存放相同元素的集合

列表的基本操作:
_#列表的拼接
_print(varlist+varlist1)

_#列表的重复
_print(varlist*3)

_#检测元素是否存在列表中
_res = 1 in varlist
print(res)

_#列表的索引操作(正着数从0开始,倒着数从-1开始)

通过下标获取指定的元素
_res = varlist[0]
print(res)

_#通过下标修改元素
_varlist[0] = 2
print(varlist)

_#注意:不能通过下标添加元素

向列表中追加元素
_varlist.append(25)
print(varlist)

#列表元素的删除del可以指定删除,pop()函数默认删除最后一个元素
del varlist[0]
print(varlist)

varlist.pop()
print(varlist)

二.列表的切片操作

语法==>列表[开始索引:结束索引:步进值]
1.列表[开始索引:] ==> 从开始索引到列表的最后
2.列表[:结束值] ==> 从开始到指定的结束索引之前
3.列表[开始索引:结束索引] ==>从开始索引到指定结束索引之前
4.列表[开始索引:结束索引:步进值] ==>从指定索引开始到结束索引之前结束,按照步进值取值切片

varlist = [‘刘德华’,‘黎明’,‘张学友’,‘郭富城’,‘唐僧’,‘孙悟空’,‘猪八戒’,‘沙和尚’]
print(varlist[2:]) #1
print(varlist[:2]) #2
print(varlist[0:3]) #3
print(varlist[2:7:2]) #4

_#倒着输出列表的元素
_print(varlist[::-1])

_#从指定下标开始,到指定下标前结束 ,并替换为对应的数据(容器类型数据会拆分为每个元素进行赋值)
#注意:需要与更新的元素的个数相对应
_varlist[0:5]=‘123’
print(varlist)

#切片的删除
del varlist[0:5]
print(varlist)


三.列表的相关函数

_#len() 检测当前列表的长度
_print(len(varlist))

_#count() 检测列表中指定元素出现的次数
_print(varlist.count(‘张学友’))

_#append() 向列表中添加新的元素
_varlist.append(‘龚声望’)
print(varlist)

_#insert() 可以向列表中指定的位置追加数据,原先在那个位置以及后面的全部后移一位
_varlist.insert(5,‘李连杰’)
print(varlist)

#pop() 可以对指定位置上的元素做出栈操作,返回出栈的元素
_print(varlist.pop())
#默认为最后一个元素出栈
print(varlist.pop(0)) #可以指定元素出栈_
_remove() 可以指定列表中的元素 进行删除,若有多个相同的,只删除第一个元素,若没找到指定元素则会报错
varlist.remove(‘唐僧’)
print(varlist)

index() 可以查找指定元素在列表中第一次出现的位置
print(varlist.index(‘唐僧’))

_#extend() 接收一个容器类型的数据,把容器中的数据追加到原列表的后面
_varlist.extend([1,2,3])
print(varlist)

_#clear() 清空列表
_varlist.clear()
print(varlist)

_#reverse 列表反转
_varlist.reverse()
print(varlist)

#sort() 对列表进行排序
_varlist1 = [5,-6,4,8,-2,3,1]
varlist1.sort()
#默认排序为升序(reverse = False)
varlist1.sort(reverse=True) #使用reverse改为降序
varlist1.sort(key=abs) #可以传递一个函数,按照函数的处理结果排序,但展示出的排序结果会是原数据
_print(varlist1)


四.深拷贝与浅拷贝

可以通过id进行检测是否两个列表同时发生了变化,id相同说明两个列表的地址一样,那么进行修改另一个列表也会发生变化.
_#简单的拷贝,可以把列表复制一份,也可以对拷贝的一维列表进行修改,不会影响原来的列表
_varlist = [1,2,3]
newlist = varlist.copy()

_#如果操作一个被拷贝的多维列表,那么原多维列表也会发生改变,这就是浅拷贝
_varlist = [1,2,3,[4,5,6]]
newlist = varlist.copy()
del newlist[3][0]
print(varlist,id(varlist[3][0]))
print(newlist,id(newlist[3][0]))

#深拷贝,可使用copy模块中的deepcopy
import copy
varlist = [1,2,3,[4,5,6]]
newlist = copy.deepcopy(varlist)
del newlist[3][0]
print(varlist,id(varlist[3][0]))
print(newlist,id(newlist[3][0]))

五.列表推导式

1.普通的列表推导式

变量 = [变量或变量的处理结果 for 变量 in 容器类型数据]

示例一:假设我们想创建一个平方列表

_#使用普通方法完成
_varlist = []
for i in range(10):
res = i**2
varlist.append(res)
print(varlist)

_#列表推导式
_varlist = [i2 for i in **range(10)]
print(varlist)

示例二:’1234’==>[2,4,6,8]

_#常规方法
_varstr = ‘1234’
newlist = []
for i in varstr:
res = int(i)*2
newlist.append(res)
print(newlist)

#使用列表推导式
_varstr = ‘1234’
varlist = [int(i)2 for i *in varstr]
print(varlist)

2.带有判断条件的列表推导式

变量 = [变量或变量的处理结果 for 变量 in 容器类型数据 条件表达式]

示例:0-9 求所有的偶数==>[ ]
_
#普通方式
_newlist = []
for i in range(10):
if i %2 ==0:
newlist.append(i)
print(newlist)

_#列表推导式
_newlist = [i for i in range(10) if i %2 == 0]
print(newlist)

3.带有条件循环的多循环列表推导式

示例:[1,2,3],[3,1,4] ==>把两个列表中的元素两两组合成一个元组,要求组合的元素不能重复

_#普通方法
_varlist1 = [1,2,3]
varlist2 = [3,1,4]
newlist = []
for i in varlist1:
for j in varlist2:
if i != j:
newlist.append((i,j))
print(newlist)

_#使用列表推导式
_newlist = [(i,j) for i in [1,2,3] for j in [3,1,4] if i != j]
print(newlist)

六.列表练习题

1.把字典中的键值对转换成 a=b 的数据格式

字典 {‘user’:’admin’,’age’:21,’phone’:18856925030}
===>列表 [‘user=admin’,’age=21’,’phone=18856925030’]
===>字符串 user=gsw&age=21&phone=18856925030

vardict = {‘user’:‘gsw’,‘age’:21,‘phone’:18856925030}
#普通方式
_varlist = []
for i in vardict:
res = i + ‘=’ + str(vardict[i])
varlist.append(res)
print(varlist)
#列表推导式
varlist = [i + ‘=’ + str(vardict[i]) for i in vardict ]
print(varlist)
#将列表转换为字符串_
res = ‘&’.join(varlist)
print(res)

2.所有字符全部转为小写

_题: [‘AAAA’,’bbBb’,’Cccc’] ===> [‘aaaa’,’bbbb’,’cccc’]

普通方法
varlist = [‘AAAA’,‘bbBb’,‘Cccc’]
newlist = []
for i in varlist:
newlist.append(i.lower())
print(newlist)
#列表推导式
_newlist = [i.lower() for i in varlist]
print(newlist)

3.x是0-5之间的偶数,y是0-5之间的奇数,把x,y组成一个元组放到列表中

#普通方法
_newlist = []
for x in range(6):
for y in range(6):
if x%2 ==0 and y%2 != 0:
newlist.append((x,y))
print(newlist)
#列表推导式
_newlist = [(x,y) for x in range(6) for y in range(6) if x % 2 ==0 and y %2 != 0]
print(newlist)

4.九九乘法表

#普通方法
_newlist = []
for i in range(10):
for j in range(1,i+1):
res = f’{i}x{j}={ij*}’
newlist.append(res)
print(newlist)
#列表推导式
_newlist = [f’{i}x{j}={ij}’ for i in range(10) for j *in range(1,i+1)]
print(newlist)