数组:存储同一种数据类型的集合 scores = [34,56,90,100..]
列表(打了激素的数组):可以存储任意数据类型
list = [1,6.2,True,'westos']
print(list,type(list)) ##输出list和list的类型
列表里面也可以嵌套列表
【1】
list1 = [1, 6.2, True, 'westos']
list2 = [list1,'hello', 'hedan']
print(list2, type(list2))
【2】
list = [1, 6.2, True, 'westos',[1,2]]
print(list, type(list))
列表特性:
service = ['http','ftp','ssh']
【1】 索引
正向索引
print(service[1])
反向索引
print(service[-1])
【2】 切片
print(service[:]) ##输出整个列表内容
print(service[::-1]) ##输出最后一个元素
print(service[1:]) ##除第一个元素外,输出其他内容
print(service[:-1]) ##除最后一个元素外,输出其他内容
【3】重复
print(service * 3)
【4】连接
service1 = ['mysql','firewalld']
print(service + service1)
【5】成员操作符
print('firewalld' in service1) ##True
print('mysql' not in service1) ##False
练习
【1】:
假定有下面这样的列表:
names = ['fentiao', 'fendai', 'fensi', 'apple']
输出结果为:'I have fentiao, fendai, fensi and apple.'
内容:
names = ['fentiao', 'fendai', 'fensi', 'apple']
name1 = ','.join(names[:-1])
print('\'I have ' + name1 + ' and ' + names[-1] + '.\'') ##用','的话,apple与'.'之间会有空格
练习【2】:
题目:
输入某年某月某日(yyyy-MM-dd),
判断这一天是这一年的第几天?
内容:
cal = input('请输入日期 yyyy-MM-dd: ')
date = cal.split('-') #拆分日期
#print(date)
year = int(date[0])
month = int(date[1])
day = int(date[2])
arr = [0,31,28,31,30,31,30,31,31,30,31,30,31]
num = 0
if ((year % 4 ==0) and (year % 100 !=0) or (year % 400 ==0)):
arr[2] = 29
for i in range(1,len(arr)):
if month > i:
num += arr[i]
else:
num += day
break
print('天数:',num)
增加:
append():追加一个元素到列表
service = ['http','ftp','ssh']
service.append('firewalld') ##在列表中增加firewalld元素
print(service)
extend():拉伸 追加多个元素到列表
service = ['http','ftp','ssh']
service.extend(['mysql','firewalld']) ##在列表中增加列表['mysql','firewalld']
print(service)
insert():在指定索引处插入元素
service.insert(1,'https') ##将https加入列表,使https为列表的第二个元素
print(service)
列表元素的删除
pop:弹出元素
>>> service = ['http','ftp','ssh']
>>> service.pop() ##默认删除最后一个元素
'ssh'
>>> service.pop()
'ftp'
>>> service
['http']
>>> service = ['http','ftp','ssh']
>>> service
['http', 'ftp', 'ssh']
>>> service.pop(0) ##删除第一个元素
'http'
>>> service
['ftp', 'ssh']
>>> service = ['http','ftp','ssh']
>>> a = service.pop(0)
>>> a ##a为弹出的元素
'http'
remove():删除列表元素
service = ['http','ftp','ssh']
a = service.remove('ftp') ##指定删除的元素名称
print(service)
print(a) ##删除'ftp',a为空
从内存种删除一个元素
del service[1] ##删除内存中第二个元素
print(service)
列表元素的修改
通过索引,重新赋值
service = ['http','ftp','ssh','mysql']
service[1] = 'https'
print(service)
通过切片赋值
service=['http','ftp','ssh','mysql']
service[:2]=['samba','https','dns']
print(service)
通过索引,重新赋值
通过切片赋值
列表元素的排序
#默认是按照ASCII玛进行排序的
service=['http','ftp','ssh','mysql','ftp','http']
service.sort() ## 排序
print(service)
service.sort(reverse=True) ##逆序
print(service)
##1-100 的数
import random
li = list(range(0,101))
print(li)
random.shuffle(li) ##100个随机排序的数
print(li)
列表的练习
要求:
有一个列表,其中包括 10 个元素,
例如这个列表是[1,2,3,4,5,6,7,8,9,0],
要求将列表中的每个元素一次向前移动一个位置,
第一个元素到列表的最后,然后输出这个列表。
最终样式是[2,3,4,5,6,7,8,9,0,1]
代码:
方一:
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
list1 = list[1:]
list1.append(list[0])
print(list1)
方二:
li = [1,2,3,4,5,6,7,8,9,0]
print(li)
li2 = li.pop(0)
print(li2)
li.append(li2)
print(li)
问题描述:
按照下面的要求实现对列表的操作:
产生一个列表,其中有 40 个元素,每个元素是 50 到 100 的一个随机整数
如果这个列表中的数据代表着某个班级 40 人的分数,请计算成绩低于平均分的学生人数
对上面的列表元素从大到小排序并输出li.sort(reverse=True)
import random
score = []
for count in range(40): ##循环40次
num = random.randint(50, 100)
score.append(num)
print('总分为:',sum(score))
avg = (sum(score)) / 40
less_avg = [] # 将小于平均成绩的成绩找出来 组成新的列表 并求列表的长度
for i in score:
if i < avg:
less_avg.append(i)
long=len(less_avg)
print('平均分数为:%.1f' %(avg))
print('有%d个同学低于平均成绩' %long)
score.sort(reverse=True)
print('排序结果:',score)