列表
1 列表的创建
列表的创建用[ ],列表可以嵌套使用,即列表中包含其它数据类型,比如包含list(列表)、tuple(元组)、dict(字典)、set(集合)
list1 = [1,2,3,4,5] #创建列表
print ('list1:',list1)
list2 = ['a','b','c','d'] #列表中的数据类型可以是相同的,都是字符串
print ('list2:',list2)
list3 = [1,2.33,'Python','a'] #列表中的数据类型也可以是不同的,整型、浮点型、字符串
print ('list3:',list3)
list4 = [1, 2.33, 'Python', 'a',list3]#列表里还可以嵌套列表,列表中有列表
print ('list4:',list4)
list5 = []#创建空列表
print ('list5:',list5)
print ("list5's type is:",type(list5))
结果如下
list1: [1, 2, 3, 4, 5]
list2: ['a', 'b', 'c', 'd']
list3: [1, 2.33, 'Python', 'a']
list4: [1, 2.33, 'Python', 'a', [1, 2.33, 'Python', 'a']]
list5: []
list5's type is: <class 'list'>
下面详细来看看list的嵌套结构
set1 = {1,2,3,4,5}
print (type(set1))
dict1 = {'a':1}
print (type(dict1))
tuple1 = ('a','b','c')
print (type(tuple1))
list7 = [1,2,3,4,5]
print (type(list7))
list8 = [set1,dict1,tuple1,list7]
print (type(list8))
结果如下
<class 'set'>
<class 'dict'>
<class 'tuple'>
<class 'list'>
<class 'list'>
2 一些列表的基本操作
2.1 通过索引取出列表中的元素
索引从0开始
2.2 连接、复制、求长度
连接用 +
复制用 *
求长度用 len()
lsit1 = [1, 2, 3, 4, 5]
list2=['a', 'b', 'c', 'd']
print ('list1+list2:',list1+list2)#使用加号连接列表
print('list1*3:',list1*3) #列表复制阵列,把列表复制三遍
print ("list1+list2's length is:",len(list1+list2)) #求列表长度
结果为
list1+list2: [1, 2, 3, 4, 5, 'a', 'b', 'c', 'd']
list1*3: [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
list1's length is: 5
list1+list2's length is: 9
2.3 检查列表中是否存在某个元素
用in
2.4 删除列表
用del
删除整个列表
删除列表中指定的元素
list2=['a', 'b', 'c', 'd']
del list2[2] #删除列表中索引为 i 的元素
print(list2)
结果为
['a', 'b', 'd']
删除子列表
list1 = [0,1,2,3,4,5,6]
del list1[1:3]#删除列表的子列表
print(list1)
结果为
[0, 3, 4, 5, 6]
2.5 求最大值最小值
用max和min
list2=['a', 'b', 'c', 'd']
print (max(list2)) #返回列表中最大的值,max(列表名)
print (min(list2))#返回列表中最小的值
结果为
d
a
列表中元素如果不能比较的话,使用max就会报错
2.6 切片
列表切片指的是将列表的一部分切出来,有点像字符串切片 列表切片的形式是:
list[起始索引:终止索引(不包含):步长间隔]
list1 = [0,1,2,3,4,5,6,7,8]
print ('list1[5:8]:',list1[5:8])#步长省略则默认为1
print ('list1[1:6:2]:',list1[1:6:2]) #步长为2
print ('list1[3:]:',list1[3:]) #取索引3到最后
print ('list1[:5]:',list1[:5]) #从头取到索引5(索引5取不到)
print ('list1[::2]:',list1[::2]) #取所有,步长为2
print ('list1[3:-1]:',list1[3:-1]) #从索引3取到倒数第一个(倒数第一个取不到)
print ('list1[:]:',list1[:]) #取所有的
print ('list1[::-1]:',list1[::-1]) #逆序列表
print ('list1[8:2:-2]:',list1[8:2:-2]) #逆序取,步长为2
结果为
list1[5:8]: [5, 6, 7]
list1[1:6:2]: [1, 3, 5]
list1[3:]: [3, 4, 5, 6, 7, 8]
list1[:5]: [0, 1, 2, 3, 4]
list1[::2]: [0, 2, 4, 6, 8]
list1[3:-1]: [3, 4, 5, 6, 7]
list1[:]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
list1[::-1]: [8, 7, 6, 5, 4, 3, 2, 1, 0]
list1[8:2:-2]: [8, 6, 4]
Note:一定要注意,索引区间为[A,B)半闭半开,-1逆序第一个元素
下面看一个比较有意思的东西
id()函数用于获取对象的内存地址
list1 = [0,1,2,3,4,5,6,7,8]
print (id(list1))
print (id(list1[:]))
list2 = list1[:]
print (id(list2))
大家多会觉得,这三个id应该都一样,可事实如下:
140373361389896
140373361252360
140373361390920
三个id都不一样,以上是为什么呢?在Python进阶部分会讲到这点,敬请期待~
2.7 修改元素
list1 = [0,1,2,3,4,5,6,7,8]
list1[2] = 'Python' # 修改列表元素
print (list1)
list1[4:6] = ['a','b','c','d']
print (list1)
结果为
[0, 1, 'Python', 3, 4, 5, 6, 7, 8]
[0, 1, 'Python', 3, 'a', 'b', 'c', 'd', 6, 7, 8]
2.8 对列表元素循环
list1 = [1,2,3,4,5]
for i in list1:
print(i)
结果为
1
2
3
4
5
3 列表的一些常用方法
3.1 append
list.append(obj),在列表末尾添加新的对象
list1 = [0,1,2,3,4,5,6,7,8]
print (list1)
list1.append('Kobe') #list.append( obj ) 在列表末尾添加新的对象
print (list1)
list1.append(1)
print (list1)
结果为
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 'Kobe']
[0, 1, 2, 3, 4, 5, 6, 7, 8, 'Kobe', 1]
3.2 count
list.count(obj),统计某个元素在列表中出现的次数
list1 = [1,2,1,2,1]
print (list1.count(1)) #list.count( obj ) 统计某个元素在列表中出现的次数
print (list1.count('1'))
结果为
3
0
3.3 extend
list.extend(seq),在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list2 = [0,1,2,3,4]
print (list2)
list2.extend('a') #list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
print (list2)
list2.extend(['b',[1,2,3]])#extend添加单个元素和append很像,但他可以一次添加更多元素,元素可以是列表
print (list2)
结果为
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 'a']
[0, 1, 2, 3, 4, 'a', 'b', [1, 2, 3]]
那么问题来了,append和extend有什么区别呢?看如下的例子就知道了
list1 = [1,2,3]
list1.append([4,5,6])
print (list1)
list1 = [1,2,3]
list1.extend([4,5,6])
print (list1)
结果为
[1, 2, 3, [4, 5, 6]]
[1, 2, 3, 4, 5, 6]
这两个方法功能类似,但是在处理多个列表的时候,这两个方法的处理结果是完全不相同的。
3.4 index
list.index(obj),从列表中找出某个值第一个匹配项的索引位置
list1 = [1,2,1,4,1]
print (list1.index(1)) #list.index(obj)从列表中找出某个值第一个匹配项的索引位置
print (list1.index(4))
结果为
0
3
3.5 insert
list.insert(index, obj),将对象插入列表,查到指定index(索引)的前面
list1 = [0,1,2,3,4]
list1.insert(2,'b')#list.insert(index, obj)将对象插入列表
print (list1)
list1.insert(0,'a')
print (list1)
结果为
[0, 1, 'b', 2, 3, 4]
['a', 0, 1, 'b', 2, 3, 4]
也可以插入其它的数据结构,例如列表
list1 = [0,1,2,3,4]
list1.insert(4,['b','c'])#也可以插入一个列表
print (list1)
结果为
[0, 1, 2, 3, ['b', 'c'], 4]
3.6 pop
list.pop(obj=list[-1]),移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list1 = [0,1,2,3,4,5]
a = list1.pop()#list.pop(obj=list[-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
print (a)
print (list1)
list1.pop(2)#也可以指定删除的索引
print (list1)
结果为
5
[0, 1, 2, 3, 4]
[0, 1, 3, 4]
3.7 remove
list.remove(obj),移除列表中某个值的第一个匹配项
list1 = [0,1,2,3,4,2,2]
list1.remove(2)#list.remove(obj)移除列表中某个值的第一个匹配项
print (list1)
结果为
[0, 1, 3, 4, 2, 2]
3.8 reverse
list.reverse(),反向列表中元素
list1 = [0,1,2,3,4,5]
list1.reverse()#list.reverse()反向列表中元素
print (list1)
结果为
[5, 4, 3, 2, 1, 0]
和 list1[::-1]
效果一样
3.9 sort
list.sort([func]),对原列表进行排序
list5 = [2,1,4,5,3,6,8,7,0]
list5.sort()#list.sort([func])对原列表进行排序
print (list5)
结果为
[0, 1, 2, 3, 4, 5, 6, 7, 8]
默认为升序,降序的操作如下
list1 = [2,1,4,5,3,6,8,7,0]
list1.sort(reverse = True)
print (list1)
结果为
[8, 7, 6, 5, 4, 3, 2, 1, 0]
也可以对字符串进行排序,按照ASCII的顺序来,数字<大写字母<小写字母
list1 = ['a','A','1','Python','python']
list1.sort()
print(list1)
结果为
['1', 'A', 'Python', 'a', 'python']
4 列表的生成技巧
如果让你生成一个列表,元素是1~10的平方,你会怎么生成?
list1 = []
for i in range(1,11):
list1.append(i**2)
print(list1)
结果为
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
其实一行代码就可以搞定
[i**2 for i in range(1,11)]#一行代码搞定!是不是很优雅
和for……in……配合生成列表, 再看一些例子,熟悉下这种操作
[m+n for m in 'ABC' for n in'abc']
结果为
['Aa', 'Ab', 'Ac', 'Ba', 'Bb', 'Bc', 'Ca', 'Cb', 'Cc']
[x**2 for x in range(1,11) if x%3==0]
结果为
[9, 36, 81]