在python中,有这样一些类型,它们的成员是有序排列的,并且可以通过下标访问成员,这些类型称之为序列,包括:列表、range、元组和字符串;其中列表的成员可修改,属于可变序列,字符串和元组,成员不可修改,属于不可变序列。序列有共同操作:
-
成员关系运算(in,not in)
-
连接操作(+)
-
重复操作(*)
-
切片操作([::])
引出:存储一个数据可以采用变量
#需求:有5个人的年龄,求平均年龄
age1 = 10
age2 = 32
age3 = 43
age4 = 18
age5 = 90
average = (age1 + age2 + age3 + age4 + age5) / 5
解决:容器【Python提供了一种数据结构list,可以同时存储多个数据】
语法:列表名 = [列表选项一,列表选项二,列表选项三.....]
说明:使用[]表示列表,列表名其实就是标识符
将列表中的列表选项被称为元素
列表中的元素分别被编了号,这些编号被称为索引【下标,角标】
列表索引:
从左向右开始编号:0,1,2....n-1
从右向左编号: -1,-2......
-7 -6 -5 -4 -3 -2 -1
[10 , 20 , 30 , 40, 50 ,90, 80]
0 1 2 3 4 5 6
list1 = [] #创建一个空列表
list2 = [10,9,True,'张三']
list3 = list() #创建一个空列表
list4 = list('hello world) # ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
list1 = [1,2,4,3,8]
num = list1[2]
print(num)
#下标越界,引发IndexError, 需要自己确定不要越界
print(list1[5])
list1[2] = 888
print(list1)
列表的遍历就是访问列表的每一个元素,可以使用while循环和for-in循环。经常使用for-in循环遍历列表
for-in语法:
for 变量名 in 列表:
语句A
else:
语句B
说明:主要用于遍历序列【遍历:依次访问序列中的每一个元素,获取元素值】
#只能获取元素,不能得到元素的下标
for value in list1:
print(value,end=' ')
#index表示下标,num表示元素值
#enumerate将列表变成一个索引序列,同时包含下标和数据
for index,num in enumerate(list1):
print(index,num)
#二维列表的遍历,循环嵌套
l1 = [[1,2],[3,4],[5,6]]
for elem in l1:
for value in elem:
print(value, end=' ')
print('')
#1.列表组合 将两个列表拼接为一个列表
#直接使用加号
list1 = [43,65,76,6]
list2 = [45,77,90,11,2,4,66]
print(list1 + list2) #[43,65,76,6,45,77,90,11,2,4,66] 产生一个新列表
#2.列表重复
#直接使用乘号 列表内容重复指定遍数,产生一个新列表
print(list1 * 2) # [43,65,76,6,43,65,76,6]
#3.成员操作
#成员运算符:in not in
#运算的结果为布尔值
list3 = ["hello",False,189,"good"]
print(189 in list3) #True
print(180 not in list3) #True
#4.列表的截取【分片,切片】
#语法:列表名[开始下标:结束下标:步长],表示按指定步长获取从开始下标到结束下标之间的元素,
# 结果为一个新的列表
#注意:包头不包尾【前闭后开区间】 [开始下标,结束下标)
#步长:默认是1,正数表示从左向右取,负数表示从右向左取
list1 = [10,20,30,40,50,60]
print(list1[0:3]) #[10,20,30]
print(list1[:3]) #[10,20,30]
print(list1[:]) #[10,20,30,40,50,60] 从头取到尾
print(list1[::2]) # [10,30,50] 隔一个取一个
print(list1[3::-1]) #[40, 30, 20, 10] 从右向左取
print(list1[-1:-3:-1]) #[60, 50] 从右向左取
print(list1[2:]) #[30, 40, 50, 60] 从下标为2的元素开始取到末尾
print(list1[-3::-1])#[40, 30, 20, 10] 从右向左取到第一个元素
#5.列表长度
print(len(list1))
#6.列表最大值和最小值、求和
print(max(list1))
print(min(list1))
print(sum(list1))
#1. list.append(obj) 在列表末尾添加新的元素
l1.append(40) #可以是普通元素
#l1[len(l1):len(l1)] = [40] #等价于l1.append(40)
print(l1) # [10,20,30,40]
l1.append([50,60]) #也可以是其它列表、元组、字典、集合等对象
print(l1) # [10,20,30,40,[50, 60]]
#2. list.extend(obj) 在列表的末尾一次性追加另一个列表中的元素
#obj不能是单个数值,可以是列表等可迭代对象
l1.extend([70,80]) #只是将元素添加到l1末尾
print(l1)
#3. list.insert(i,obj) 在指定下标i的位置插入一个新元素,原来的元素后移,不会覆盖
l1.insert(1,-20)
print(l1) #[10, -20, 20, 30, 70, 80]
l1.insert(0,[1,2,3])
print(l1) #[[1, 2, 3], 10, -20, 20, 30, 70, 80]
#1. list.pop(i) 删除指定下标的元素,如果下标越界,会出现IndexError
value = l1.pop() #删除最后一个元素,并返回该元素的值
print(value)
print(l1)
l1.pop(0) #删除下标为0的元素
print(l1)
#2. list.remove(x) 删除列表中第一个值等于x的元素,删除的时候是从左向右找到第一个等于x的元素删除
l1.remove(-20)
print(l1)
# l1.remove(100) 如果列表中没有该值,会引起错误:ValueError
#3.按下标删除
del l1[0]
del l1[0:2] #删除第一个和第二个元素
#3 list.clear() 清空列表
l1.clear()
print(l1) #[]
#1. list.index(x,start,end) 在[start end)范围内查找第一个等于x的元素的下标
#参数说明: x 要查找的元素; start,开始下标;end 结束下标,不包含结束下标
#返回值:如果有值等于x的元素,返回其下标,如果不存在值等于x的元素,会引发ValueError
print(l1.index(10)) #1
print(l1.index(330,2,5)) #4
#2 list.count(x) 查找列表中x出现的次数,如果没有x,返回0
print(l1.count(30)) #2
print(l1.count(99)) #0 不存在99
#把列表元素逆序排列
l1.reverse()
print(l1)
#1. list.sort(key=None,reverse=None) 列表方法,实现列表就地排序,不产生新列表
#参数:key参数指明用哪个函数进行排序,默认值是None,用<进行比较 可选参数
reserse:布尔值,默认值是None,也就是假,从小到大排序,如果设置为True,则从大到小排序,可选参数
l1 = [90,30,70,20,10,60]
print(l1) # [90, 30, 70, 20, 10, 60]
l1.sort()
print(l1) # [10, 20, 30, 60, 70, 90]
list1 = [[1,2,3],[4,5,6]]
#获取元素
print(list1[0][0],list1[0][1],list1[0][2]) #1 2 3
#range(start,end,step=1)
#参数:start,开始值,默认是0;
# end 结束值(序列不包括该值),必须大于start
r1 = range(1,11) #[1,2,3...10]
r2 = range(10) #[1,2,3,...9]
r3 = range(1,11,2) #[1,3,5,7,9]
#求1+2+....+100的和
sum = 0
for i in range(1,101):
sum += i
print(sum)
#求100以内的偶数和
sum = 0
for i in range(0,100,2):
sum += i
print(sum)
#按下标列表遍历
l1 = [10,80,65,43,90]
i = 0
while i < len(l1):
print(i,l1[i])
#或者
for i in range(len(l1)):
print(i,l1[i])
函数说明 | |
---|---|
choice(seq) | 返回一个序列(列表、元组,字符串)中返回一个随机元素 |
randrange(start,end,step) | start 指定范围的起始值 包含本身 end 指定范围的结束值 不包含本身 step 步长 |
randint() | 返回一个随机整数 |
shuffle(seq) |
相关代码:
# 声明
names = ['jack','tom','lucy','superman','ironman'] # 列表
computer_brands = []
# 增删改查
# 地址
print(id(names))
print(id(computer_brands))
# 查: 通过下标
# 元素获取使用: 下标 索引
print(names[0])
print(names[1])
# 获取最后一个元素
print(names[-1])
print(len(names))
print(names[len(names)-1])
#获取第一个元素
print(names[-5])
# 结合循环
# for i in 'hello':
# print(i)
print('***************')
for name in names:
print(name)
# 查询names里面有没有保存超人
for name in names: # name = jack name=tom
if name == 'superman':
print('有超人在里面!')
break
else:
print('没有找到超人在里面!')
# 简便 't' in 'they' ----> True False
if 'superman' in names: # 判断有没有
print('有超人在里面!')
else:
print('没有找到超人在里面!')
# 增删改
brands = ['hp','dell','thinkpad','支持华为','lenovo','mac pro','神州'] # HASEE
# 改
print(brands)
print(brands[-1])
brands[-1]='HASEE' # 赋值 步骤:1.找到(使用下标) 2. 通过=赋值 3.新的值覆盖原有的值
print(brands)
print('-------------------')
# HUAWEI
# for brand in brands:
# if '华为' in brand:
# brand= 'HUAWEI'
# print(brands)
for i in range(len(brands)):
# i是0,1,2,3,。。。 ---》 下标
if '华为' in brands[i]:
brands[i]='HUAWEI'
break
print(brands)
# 删除 del 是 delete的缩写
del brands[2]
print(brands)
# 删除 只要是 hp , mac 都要删除
print('-----------删除---------------')
# l=len(brands)
# for i in range(l):
# if 'hp' in brands[i] or 'mac' in brands[i]:
# del brands[i]
# # break
# print(brands)
l=len(brands)
i=0
while i<l:
if 'hp' in brands[i] or 'mac' in brands[i]:
del brands[i]
l-=1 # 长度的减少
i+=1 # 下标的增加
print(brands)
'''
They are students
yews
words = ['hello','good','apple','world','digit','alpha']
提示输入一个单词比如:hello,如果输入的单词在列表中则删除
最后打印删除后的列表
'''
w = 'helloaa'
if 'll' in w:
print('zai')
'''
words = ['hello','good','apple','world','digit','alpha']
提示输入一个单词比如:hello,如果输入的单词在列表中则删除
最后打印删除后的列表
'''
words = ['hello','good','gooo','world','digot','alpha']
w = input('请输入一个单词:')
# 方式1:
# if w in words:
# print('存在次单词')
# 'abc' in ['abc','hello','aaaa',..] 内容有没有在列表中存在
# 'go' in 'good' 判断字符串w有没有出现在word
# for word in words:
# if w == word: # == 'go'=='good' in
# print('存在此单词!')
# break
# for word in words:
# if w in word:
# del word
# break
# print(words)
words = ['hello','goods','gooo','world','digot','alphago']
w = input('请输入一个单词:')
i = 0 # 表示下标
l = len(words) # 5
while i<l: # i<5
if w in words[i]:
del words[i]
l-=1
# i-=1
continue
i+=1
print(words)
# 字符串切片操作
# s = 'abcdefg' s[2:5] --->cde
# 标号:
list1 = ['杨超越','热巴','佟丽娅','杨幂','赵丽颖','刘亦菲','黑嘉嘉',100,99.9]
print(list1)
print(list1[3])
# 列表也是支持切片 从左向右
print(list1[3:6]) # 将截取的结果再次保存在一个列表中 ['杨幂','赵丽颖','刘亦菲']
print(list1[-3:-1])
print(list1[::2]) # 步长
print(list1[-5:-1:2]) #
# 反方向 从右向左
print(list1[-1::-1])
print(list1[-1::-2]) # [99.9,'黑嘉嘉','赵丽颖','佟丽娅','杨超越']
# list列表的添加:
# 临时小数据库:list
# 创建一个空列表
girls = ['杨幂']
# quit 表示退出
# 列表的函数使用: append extends insert
# append() 末尾追加
# while True:
# name = input('请输入你心目中的美女名字:')
# if name=='quit':
# break
# girls.append(name)
# print(girls)
# extend 类似列表的合并
names=['黑嘉嘉','孙俪','巩俐','王丽坤']
# name = input('请输入你心目中的美女名字:')
# girls.extend(names)
print(girls)
# 符号 + 也可以用于列表的合并
girls = girls+names
print(girls)
# insert 插入
# ['杨幂','黑嘉嘉','孙俪','巩俐','王丽坤']
# 0 1 2 3 4
# append 末尾追加
# insert 指定位置添加
# extend 一次添加多个元素
girls.insert(1,'刘涛')
print(girls)
# 产生10个随机数,将其保存到列表中
'''
步骤:
1. 如何产生随机数
2. 10个数字产生
3. 将产生的随机数放到列表中
4. 打印列表
'''
import random
# random_list=[] # 用来存放随机数
# for i in range(10):
# ran = random.randint(1,20)
# # 保存到列表中
# random_list.append(ran)
# print(random_list)
# 产生10个不同的随机数,将其保存到列表中
# random_list=[]
# for i in range(10):
# ran = random.randint(1,20)
# # if ran in random_list:
# # pass
# # else:
# # random_list.append(ran)
# if ran not in random_list:
# random_list.append(ran)
# print(random_list) # 个数不一定是10个
random_list=[]
i=0
while i<10:
ran = random.randint(1,20)
if ran not in random_list:
random_list.append(ran)
i+=1
print(random_list)
# 找出列表中的最大值 max(list) ---->列表中的最大值
max_value = max(random_list)
print(max_value)
min_value = min(random_list)
print(min_value)
print('------------自定义求最大值和最小值---------------')
# 假设列表中的第一个元素就是最大值
mvalue=random_list[0]
minvalue = random_list[0] # 假设的最小值
for value in random_list:
# 求最大值
if value>mvalue:
mvalue=value
# 求最小值
if value<minvalue:
minvalue=value
print('最大值是:',mvalue,',最小值是:',minvalue)
# 求和
he = sum(random_list)
print('系统计算求和:',he)
# 声明累加的变量名sum_1
sum_1=0
for value in random_list:
sum_1+=value
print(sum_1)
# 排序: sorted 排序 默认是升序
# sorted(list) ---> 默认是升序 1,2,3,4,5,6
# sorted(list,reverse=True) ---->降序 6,5,4,3,2,1
new_list = sorted(random_list,reverse=True)
print(new_list)
# 自己写: 冒泡排序法
#
if 'good'=='good': # == 比较的是内容 'good' 'good'
print('相等')
if 'good' in 'goods': # in 运算符 应用在字符串判断中 也可以用在[]
print('相等或者包含')
i=1
for w in ['goods','good','abc','aaaa']:
# w=goods w=good w=abc w=aaaa
print('good' in w) # True True False False
print('------->',i)
i+=1
# A. 1 B,2 C.1,2 D: 以上都对
if 'good' in ['goods','good','abc','aaaa']:
pass
'''
if 让 in 判断作为一个条件表达式:
if 'a' in 'abc':
pass
if 'a' in ['a','b','c']:
pass
但是:
for ... in 循环条件
for 变量 in 字符串|列表:
pass
'''
'''
'''
a=6
b=9
# temp = a # temp =6
# a = b
# b = temp
# print(a,b)
# a,b=0,1
a,b=b,a
print(a,b)