目录

一、列表定义

          数组:存储同一种数据类型的集合 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]