列表:可以说是我们C中的数组。
1.列表可以把[整数,浮点数,字符串,对象]打包起来。
num = []
num1 = [1,2,3,4,5]
num2 = ['111','222','333']
num3 = [1.1,'abc','你好',[1,2,3]]
print(num) #[]
print(num1) #[1, 2, 3, 4, 5]
print(num2) #['111', '222', '333']
print(num3) #[1.1, 'abc', '你好', [1, 2, 3]]
2.append(self,object),extend(self, iterable)
#append 向列表添加元素,append()这个方法只能加一个元素
num = ['aa','bb']
num.append('hello')
#同时加入两个或以上元素需要用到这个方法:extend()
#num.extend('abc','ABC')
#print(num) #TypeError: extend() takes exactly one argument (2 given) 因为该方法添加的是列表的模式
num.extend(['abc','ABC'])
print(num) #['aa', 'bb', 'hello', 'abc', 'ABC']
append和extend都是向末尾添加数据,差别如下:
num = ['aa', 'bb', 'hello', 'abc', 'ABC']
num.append(['1','2']) #['aa', 'bb', 'hello', 'abc', 'ABC', ['1', '2']]
num.extend(['1','2']) #['aa', 'bb', 'hello', 'abc', 'ABC', '1', '2']
3.insert(self, index,object)
num = ['aa', 'bb', 'hello', 'abc', 'ABC']
num.insert(1,'11')
print(num) #['aa', '11', 'bb', 'hello', 'abc', 'ABC']
num.insert(0,'first')
print(num) #['first', 'aa', '11', 'bb', 'hello', 'abc', 'ABC']
4.获取数据&删除数据, 列表从小标0开始。当然python支持从最后倒着数,从 -1开始
num = ['aaa','bbb','ccc','ddd','eee']
print(num[0]) #aaa
print(num[4]) #eee
print(num[-1]) #eee
print(num[-5]) #aaa
#pop() 如果不加索引,从列表中取出最后一个元素,然后列表不包含已经取出的数据
num = ['aaa','bbb','ccc','ddd','eee']
a = num.pop()
print(a) #eee
print(num) #['aaa', 'bbb', 'ccc', 'ddd']
b = num.pop()
print(b) #ddd
print(num) #['aaa', 'bbb', 'ccc']
#pop(index) 加索引,可以取出对应索引位置的数据,原列表中不包含取出后的数据
num = ['aaa','bbb','ccc','ddd','eee']
a1 = num.pop(0)
print(a1) #aaa
print(num) #['bbb', 'ccc', 'ddd', 'eee']
num = ['aaa','bbb','ccc','ddd','eee']
num.remove('aaa')
print(num) #['bbb', 'ccc', 'ddd', 'eee']
del num[0]
print(num)
del num #del 可以删除整个列表
print(num) #NameError: name 'num' is not defined
#获取最后一个数字,然后插入到第一个
list = [1,2,3,4,5]
a = list.pop()
list.insert(0,a)
# 其实可以直接缩成一句执行如下:
# list.insert(0, list.pop())
print(list) #[5, 1, 2, 3, 4]
5.切片
#切片用冒号分开,第一个数字表示起始位置,第二个数字表示结束位置.
# 左闭右开
num = ['aaa','bbb','ccc','ddd','eee']
a = num[1:3]
print(a) #['bbb', 'ccc']
print(num) #['aaa', 'bbb', 'ccc', 'ddd', 'eee']
#list也支持负数索引, [-3]5, [-2]9, [-1]4 因事左开右闭,所以是[5,9]
list = [1,2,3,4,5,9,4]
a = list[-3:-1]
print(a) #[5, 9]
#如果切片起始位置是列表的第一位即0.
a1 = num[0:3] #起始位置为第一位
print(a1) #['aaa', 'bbb', 'ccc']
a2 = num[1:] #从起始位置起一直切到最后
print(a2) #['bbb', 'ccc', 'ddd', 'eee']
a3 = num[:] #拷贝整个num
print(a3) #['aaa', 'bbb', 'ccc', 'ddd', 'eee']
#num[0]是取一个值,num[0:1]是取一个列表的分片,等于还是一个列表
a4 = num[0]
a44 = num[0:1]
print(a4) #aaa
print(a44) #['aaa']
#步长
#步长如果是负数,则是改变方向
list1 = [1,2,3,44,5,9,45]
a1 = list1[::2]
a2 = list1[::-2]
print(a1) # [1, 3, 5, 45]
print(a2) # [45, 5, 3, 1]
6.【深拷贝和浅拷贝】问题来了: 原始list1, list2=list1[:] 而list3= list1, 那么list2和list3一样吗?
#切片的方式等于又重新建立了一个列表list2。
# 而使用 = 号,则等于又另起了一个标签list3,指向list1
list1 = [2,4,6,3,7,1,7,9,2,7,2]
list2 = list1[:]
#print('list2=',list2) #list2= [2, 4, 6, 3, 7, 1, 7, 9, 2, 7, 2]
list3 = list1
#print('list3=',list3) #list3= [2, 4, 6, 3, 7, 1, 7, 9, 2, 7, 2]
list1.sort()
print('list1=',list1) #list1= [1, 2, 2, 2, 3, 4, 6, 7, 7, 7, 9]
print('list2=',list2) #list2= [2, 4, 6, 3, 7, 1, 7, 9, 2, 7, 2]
print('list3=',list3) #list3= [1, 2, 2, 2, 3, 4, 6, 7, 7, 7, 9]
延伸问题:为什么?
old = [1,2,3,4,5]
new = old
old = [6]
print(new) #[1, 2, 3, 4, 5]
print(old) #[6]
list1 = [9,2,6,4,5]
list2 = list1
list1.sort()
print(list2) #[2, 4, 5, 6, 9]
print(list1) #[2, 4, 5, 6, 9]
7.列表的常用操作符
#列表比较是取第0个的大小返回值
list1 = [1,2,3]
list2 = [3,2,1]
print(list1 > list2) #False
print(list1 < list2) #True
print(list1 == list2) #False
#字符串的比较是比较ASCII的大小
# A--65 a--97
list11 = ['a','b']
list22 = ['A','B']
print(list11 > list22) #True
print(list11 < list22) #False
#列表,字符串使用 + 号作为拼接。也可以使用* 号作为重复
list1 = [1,2,3]
list2 = ['a','b','c']
print(list1+list2) #[1, 2, 3, 'a', 'b', 'c']
print(list2 * 3) #['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
#成员关系操作符
while 'a' in list2:
print('True1') #True1
break
if 'aa' not in list2:
print('True2') #True2
#使用in, not in 系统只判断第一层列表元素,列表中的列表元素不能判断出来,'ab' in list3这样错误
#可以使用 'ab' in list3[2]这样才行
list3 = [1,2,['ab','cd','11'],34]
print(list3[2]) #['ab', 'cd', '11']
print(list3[2][0]) #ab
8.列表的内置函数
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'
# count()计算它的参数在列表中出现的次数。
list1= [1,3,0,2,7,3,1,7,3,9]
a = list1.count(3) #3
# index()返回参数在列表中的位置
list2= [1,3,0,2,7,3,1,7,3,9]
a20 = list2.index(0) #2
a21 = list2.index(1) #0 返回第一个数字所在的位置
a27 = list2.index(7,5,9) #7 从下标为5--9中找7在列表中的位置
#reverse()将整个列表反转,保存
list3= [1,3,0,2]
list3.reverse() #[2, 0, 3, 1]
list31 = [12, ['ab', 'CD'], 32]
list31.reverse() #[32, ['ab', 'CD'], 12]
#sort()用指定的方式对列表成员进行排序,默认是从小到大排序。
#sort(func,key,reverse),无参数是默认从小到大,
# 第一个func是指排序的算法,第二个key是指跟这个算法搭配的关键词。第三个参数跟上面的reverse()方法类似,默认参数是false即没有逆行
list4 = [1,3,5,87,2,3,1,5,0,5,8,9,3,1]
#list4.sort()
#print(list4) #[0, 1, 1, 1, 2, 3, 3, 3, 5, 5, 5, 8, 9, 87]
list4.sort(reverse= True)
print(list4) #[87, 9, 8, 5, 5, 5, 3, 3, 3, 2, 1, 1, 1, 0]
#copy 复制字符串之后给了新的字符串
list1 = [1,2,3,4,5]
list2 = list1.copy()
print(list2) #[1, 2, 3, 4, 5]
list2.pop() #[1, 2, 3, 4]
print(list2)
print(list1) #[1, 2, 3, 4, 5]
list2 = [2]
print(list2) #[2] 这里等于重新赋值了
print(list1) #[1, 2, 3, 4, 5]
#clear() 清空
list1.clear()
print(list1) #[]