目录
一、列表定义
数组:存储同一种数据类型的集合 scores = [34,56,90,100..] 列表:可以存储任意数据类型(整型,浮点型,对象等)
二、列表的特性
1、索引 标号类似于字符串索引,都是从0号开始索引
三、列表练习
四、对列表的操作(增,删,拷贝,其他操作函数)
service = ['http','ftp','ssh']1、增
2、删
3、列表的拷贝
可以看到浅拷贝后的a随着原列表变了,深拷贝b没有变化
4、其他常见列表操作函数:
一、列表定义
数组:存储同一种数据类型的集合 scores = [34,56,90,100..]
列表:可以存储任意数据类型(整型,浮点型,对象等)
list = [1,1.2,True,'westos']
print(list,type(list))
列表里面也可以嵌套列表
list2 = [1,1.2,True,'westos',[1,2,3,4]]
print(list2,type(list2))
二、列表的特性
service = ['http','ftp','ssh']
1、索引 标号类似于字符串索引,都是从0号开始索引
正向索引
service[0]
反向索引
service[-1]
切片
service[::-1] 反转列表
service[1:] 除了第一个元素外,其他所有的
service[:-1] 除了最后一个元素外其他所有的
重复
print(service * 3)
连接
service1 = ['mysql','firewalld']
print(service + service1)
成员操作符
print('firewalld' in service) 输出bool值
print('ftp' not in service1)
三、列表练习
1、假定有下面这样的列表:
names = ['fentiao', 'fendai', 'fensi', 'apple']
输出结果为:'I have fentiao, fendai, fensi and apple.'
答:names=['fentiao','fendai','fensi','apple']
print('I have '+' '.join(names[:-1])+' and '+names[3])
联系到字符串的特性,可以用join进行连接
2、输入某年某月某日(yyyy-MM-dd)
判断这一天是这一年的第几天?
date = input("请输入年月日(yyyy-MM-dd):")
y = int(date.split('-')[0])
m = int(date.split('-')[1])
d = int(date.split('-')[-1])
mount = 0
date = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if (y % 4 == 0 and y != 100) or y % 400 == 0:
date[2] = 29
#方法一:
for i in range(1, m):
mount += date[i]
print("这一天是这一年的第%d天" % (mount + d))
#方法二:
# for i in range(1,len(date)):
# if m>i: 方法二
# mount = mount+date[i] 加上该月份之前那些月份的天数
# else:
# mount+=d 加上该月的天数
# print("这一天是这一年的第%d天" % mount)
四、对列表的操作(增,删,拷贝,其他操作函数)
service = ['http','ftp','ssh']
1、增
- append():追加一个元素到列表末尾
service.append('firewalld')
- extend():追加多个元素到列表末尾
service.extend(['mysql','nfs'])
- insert():在对应目标之前插入元素
service.insert(1,'https')
insert()例子:
names=['fentiao','fendai','fensi','apple']
names.insert(1,'你好')
print(names)
names.insert(-1,'finish')
print(names)
结果:
['fentiao', '你好', 'fendai', 'fensi', 'apple']
['fentiao', '你好', 'fendai', 'fensi', 'finish', 'apple']
2、删
- pop() 默认删除最后一个,返回该元素的值,删除下标对应的元素
- remove(‘ ’) 删除一个具体的列表元素,返回None,删除具体的元素
- del names[0:2] 删除列表里第1-2个元素 删除下标对应的元素
del 也可以删除整个数据对象(列表、集合等)
>>> str=[0,1,2,3,4,5,6]
>>> del str
>>> str #删除后,找不到对象
注意:del是删除引用(变量)而不是删除对象(数据),对象由自动垃圾回收机制(GC)删除。
补充: 删除元素的变相方法,即将一个空的列表拷贝给给列表
实现如下:
names=['fentiao','fendai','fensi','apple']
a=names.pop(0) pop
print(names,'\n',a)
b=names.remove('apple') remove
print(names,'\n',b )
del names[0:2] del
print(names)
结果:
['fendai', 'fensi', 'apple']
fentiao
['fendai', 'fensi']
None
[]
3、列表的拷贝
对于python里面如果想要进行列表的复制,具体的操作语句如下:
1) 深拷贝:--真正意义上的拷贝
M=[A,b,a,c]
N=M[:]
2) 浅拷贝:--赋值,就是暂时的等量代换
N=M
两种拷贝方式的区别:表面看起来两者的实现效果是一样的,如果继续对N进行操作的时候就会出现问题
第一种拷贝复制,它的作用是将列表M复制下来给N,如果后面对M进行操作,它对于N是完全没有影响的,而我们如果采用赋值的方式,那么在后面对M操作以后就会影响 到N,N的值也会随之改变。
综上所述,第一种python列表的拷贝方法才是真正意义上的深拷贝,而赋值操作只是一种暂时的等量代换,它属于一种浅拷贝。
示例如下:
names=['fentiao','fendai','fensi','apple']
a=names #浅拷贝
b=names[:] #深拷贝
print(a,'\n',b)
names.insert(1,'hello') #给原列表插入hello
print(a,'\n',b)
输出:
['fentiao', 'fendai', 'fensi', 'apple']
['fentiao', 'fendai', 'fensi', 'apple']
['fentiao', 'hello', 'fendai', 'fensi', 'apple']
'fentiao', 'fendai', 'fensi', 'apple']
可以看到浅拷贝后的a随着原列表变了,深拷贝b没有变化
4、其他常见列表操作函数:
names.count(1):输出元素1在列表names里面出现的次数
names.index(1):输出元素1在列表names里面的索引位置号
names.index(A,a,b):对于列表names里面包含多个元素1时,输出在列表names索引号a-b之间的特定索引号
names.reverse():将列表names进行前后的翻转,和names[::-1]的功能一样
names.sort():将列表m里面地数据进行从小到大的排列
names.sort(reverse=True):将列表m里面地数据进行从大到小的排列
从小到大排序或者用:names.sort() names.reverse()
实现如下:
names=[1,2,3,4,5,1]
a=names.count(1)
print(a)
b=names.index(1,3,6)
print(b)
c=names[::-1]
print(c)
names.reverse()
print(names)
names.sort()
print(names)
names.sort()
names.reverse()
print(names)
输出如下:
2
5
[1, 5, 4, 3, 2, 1]
[1, 5, 4, 3, 2, 1]
[1, 1, 2, 3, 4, 5]
[5, 4, 3, 2, 1, 1]