0. 列表都可以存放一些什么东西?
我们可以说Python 的列表是一个打了激素的数组,如果把数组比喻成集装箱,那么 Python 的列表就是一个大仓库,Ta 可以存放我们已经学习过的任何数据类型。
mix = [1,"张三",3.14, [1,"李四", 3]]
#如果想得到列表中某个元素,只需要写出位置即可。
mix[0] = 1
mix[1] = "张三"
1. 向列表增加元素有哪些方法?append() -- 增加一个元素至列表末尾(如果是两个元素就会报错),这个元素可以是任何形式。
extend() -- 扩展一个元素到列表末尾(如果是两个元素就会报错),扩展的意思是其可以将2个列表并列。
insert(n,元素) -- 在数列的第n位添加元素
member = [1,2,3]
member.append([4,5])
# 将数列[4,5]做为一个元素,添加进member数列 member = [1,2,3,[4,5,]]
print(member)
member.extend([6,7])
#将数列[4,5]中的每个元素单做单独元素,添加进member数列member = [1,2,3,[4,5],7,8]
print(member)
member.insert(0,"张三")
# 在member第0位添加元素0 member = ["张三",1,2,3,[4,5],7,8]
print(member)
2. 分片应用
当需要获取列表中的一个子部分,就需要使用分片方法,语法为[start:stop:step]start: 开始的位置(默认其实位置)
stop: 结束的位置,不会将该位置的数字列入该新列表(默认末尾+1)
step: 间隔,即多少间隔,取一个值,(默认为1)Remark:
1. 步长不能为0,要不就走不动了
2. 步长可以是负数,改变方向(从尾部开始向左走)
list1 = [0,1,2,3,4,5,6,7,8,9]
list2 = list1[2:6]
# List2 选取list1中,从第二个位置开始,到第六个位置结束的子数列,list2 = [2,3,4,5]
list3 = list1[:]
# List3 选取list1中,从第0个位置开始,到第个9+1位置结束的子数列,list3 = [0,1,2,3,4,5,6,7,8,9]
List4 = list1[::2]
# List4 选取list1中,从第0个位置开始,到第个9+1位置结束,每隔2个位置取一个的子数列
#list4 = [0,2,4,6,8]
# 如果我设置start和stop会负数呢,List 5会是多少?
List5 = list1[-1:-5]
Python 的列表很聪明,支持负数索引,如图:正常索引是从左到右索引,负数索引是从右到左。 所以List5 = [9,8,7,6]
分片完成列表的拷贝 list2 = list1[:],那事实上可不可以直接写成 list2 = list1 更加简洁呢?
list1 = [1, 3, 2, 9, 7, 8]
list2 = list1[:]
print(list2)
# 得出的结果是[1, 3, 2, 9, 7, 8]
list3 = list1
print(list3)
# 得出的结果是[1, 3, 2, 9, 7, 8]
# 看上去貌似一样的,对吧?但事实上呢?我们利用列表的一个小伙伴做下修改
list1.sort()
# sort()是列表的内置排序函数(默认从小到大)
print(list1)
#得到的结果是[1, 2, 3, 7, 8, 9],list1已经从小到大排了个序
print(list2)
#得到的结果[1, 3, 2, 9, 7, 8]
print(list3)
#得到的结果是[1, 2, 3, 7, 8, 9]
#真正的汉奸、墙头草是list3,Ta跟着list1改变了,这是为什么呢?
Python的变量就像一个标签,就一个名字而已,贴哪是哪,指哪打哪,如下图。
这下大家应该明白了吧,在为一个固定的东西指定另一个名字的做法,只是向同一个东西增加一个新的标签而已。
猜猜下面print(new)是什么结果:
old = [1,2,3,4]
new = old
old= [7]
print(new) # 会打印出什么呢?
Remark:
1.列表的拷贝也可以用列表拷贝函数copy()
2. 如果要对列表进行排序,用sort(),默认从小到大,如果想得出从大到小的排序,可以加入reverse()(反转函数)
list1 = [1,2,5,4,3,0]
list2 = list1.copy()
print(list2)
#会得到[1,2,5,4,3,0]
list3 = list1.sort()
print(list3)
#会得到[0,1,2,3,4,5]
list4 =list3.reverse()
print(list4)
#会得到[5,4,3,2,1,0]
#简单的写法
list 5 = list.sort(reverse = true)
print(list5)
#会得到[5,4,3,2,1,0]
3. 删除列表的元素有哪些方法?remove(元素) -- 删除列表中的某一个元素。
del 列表[] -- 删除列表中某个位置元素或者某段位置元素,符号是[]非().
pop(n) -- 删除列表中的n位置的元素,不填默认最后一个元素,并赋值
list1 = [0,1,2,3,4,5]
list1.remove(1)
print(list1)
# 得到结果[0,2,3,4,5]
list2 = list1.remove(0)
print(list2) # 猜猜得到什么
print(list1) # 得到结果[2,3,4,5]
number = [0,12,24,36,48]
del number[1]
print(number)
# 得到结果[0,24,36,48]
del number[:2]
print(number)
# 得到结果[36,48]
del number[:] #清空表格,和number.clear()效果一样
print(number)
# 得到结果[]
member = ["张三","李四","王五","赵二"]
a = member.pop()
print(a) # 猜猜得到什么
print(member) # 得到结果["张三","李四","王五"]
4.其他请问 list1[0] 和 list1[0:1] 一样吗?
不一样,list1[0] 返回第0个元素的值,list1[0:1] 返回一个只含有第0个元素的列表。
List1 = [0,1,2,["today","tomorrow"],4]
list1[0] = 0 #返回第0个元素的值
list1[0:1] = [0] #返回一个只含有第0个元素的列表
#如何将"yesterday"插入到today 前面?
list1[3].insert(0,"yesterday")
print(list1)
#得到结果应该是 [0,1,2,["yesterday","today","tomorrow"],4]
# 如何将列表中元素替换
#将["yesterday","today","tomorrow"] 替换成3
list1[3] = 3
print(list1)
#结果应该是[0,1,2,3,4]
#如果将2,3,4换成3,4,5
list1[2:] = [3,4,5]
print(list1)
#结果应该是[0,1,3,4,5]如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?
>>> list1.insert(0, list1.pop())列表中内置函数(没介绍的)count(元素) -- 计算元素在列表中有多少个
index(元素,start,stop) -- 查找该元素在start位置到stop位置的第几个(start 和 stop不填默认为全部元素),如果含有多个元素,只返回第一个值。
list1 = [0,1,2]
list2 = [3,4]
list3 = list1 + list2
print(list3) # 结果为 [0,1,2,3,4]
list4 = list2 * 4
print(list4) # 结果为 [3,4,3,4,3,4,3,4]
print(list4.count(3)) # 结果为 4
print(list4.index(4)) # 结果为 1列表列表推导式或列表解析
列表推导式(List comprehensions)也叫列表解析,灵感取自函数式编程语言 Haskell。Ta 是一个非常有用和灵活的工具,可以用来动态的创建列表,语法如:
number1 = [ i*i for i in range(10) ]
print(number1) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
#其实上面上面这个语法相当于
list1 = []
for x in range(10):
list1.append(x**2)
print(list1)
问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。
>>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]
答案:
list1 = []
for x in range(10)
for y in range(10)
if (x%2==0) and (y%2 !=0):
list1.append((x,y))
print(list1)
问题:请使用列表推导式补充被涂掉的部分
答案:list3 = [name+":"+slogan[2:] for slogan in list1 for name in list2 if slogan][0]=name[0]]