P41复习
s = 'abcd123'
# for i in range(10): #0,1,2,3,..,9
# print(i)
# for i in s: # a,b,c,d,1,2,3
# print(i)
sum = 0
for i in 'sag237dabkd73':
if i.isdigit():
sum += int(i)
print(sum)
字符串:
-
下标:
0~n-1
n~-1
s[-1],s[3]
-
切片:
s[1:-1]
s[1:-1: -2]
s[1:-1: -2]error
s[-1:1: -2] 方向
s[:]
s[1:]
s[:-1] 从头到-1 但不包含-1
-
字符串的操作
len,find,rfind,startswith,endswith,isalpha,isdigit,…
replace(old,new,count)
split(‘指定的分隔符’) rsplit(‘指定的分隔符’)
strip() lstrip() rstrip()
count
join()
format
lower() upper() title()
-
列表:
定义格式:
[]
[‘aa’,‘bb’,‘cc’] [1,2,3,4] [[],[],[]]
-
下标和切片
P42 列表的添加
append()用于在列表末尾添加新的对象,输入参数为对象;
extend()用于在列表末尾追加另一个序列中的多个值,输入对象为元素队列;
'''
添加 删除 修改 查询
1.添加元素: append 追加 类似排队
'''
list1 = []
list2 = ['面包']
list1.append('火腿肠')
list1.append('酸奶')
list1.append('辣条')
print(list1)
list2.append('薯条')
print(list2)
# list1,list2
# list1 = list1+list2
# print(list1)
# list1 = list2+list1
# print(list1)
'''
+可以应用于:
数字: n=1+3
字符串: s='aa'+'bb'------>aabb
列表: list0=[1,2,3]+['a','b']--->[1,2,3,'a','b']
'''
print('---' * 20)
# extend
list1.extend(list2)
print(list1)
'''
买多件:
商品名称:价格,数量
要用到列表的嵌套
'''
container = [] #存放多件商品的容器
flag = True
while flag:
# 添加商品
name=input('商品名称:')
price = input('商品价格:')
number=input('商品数量:')
goods=[name,price,number]
# 将商品添加container
container.append(goods)
# container.extend(goods)
'''
这里如果用了extend,container=[name,price,number,name,price,number,...]
可是我们想要的是 container=[[name,price,number],[name,price,number],[],[]..]
'''
answer = input('是否继续添加?(按q或Q退出)')
if answer.lower() == 'q': # if answer=='q' or answer=='Q':
flag = False
print('*-'*20)
# 遍历container
for goods in container: # [[],[],[],...]
print(goods)
'''
['牛奶', '2', '3']
['面包', '3', '4']
['辣条', '2', '3']
'''
print('-#'*20)
print('商品名称\t价格\t数量')
for goods in container:
# print(goods[0],goods[1],goods[2])
s= '{}\t{}\t{}'.format(goods[0],float(goods[1]),int(goods[2]))
result = s.center(15)
print(result)
P43 列表的删除
'''
删除 pop remove clear
pop(index):根据下标删除列表中的元素,下标在写的时候注意不要超出范围
pop():从后往前依次删除
remove(element):根据元素名称删除,如果删除的元素列表中不存在则报错,list.remove(x): x not in list
如果列表中存在多个同名元素element,只删除遇到的第一个元素,后面的元素不会被删除(想都删掉,需要循环)
关键字in;元素 in 列表 表示元素是否在列表中? 返回值是bool类型
clear():
'''
list1=['火腿肠','酸奶','辣条','面包','薯条']
# list1.pop(-1)
# print(list1) #['火腿肠', '酸奶', '辣条', '面包']
#
# list1.pop()
# print(list1)
list1.remove('辣条')
print(list1)
# 判断是否存在要删除的元素
if '辣条呀' in list1:
print('存在')
else:
print('不存在')
list1=['火腿肠','酸奶','辣条','面包','薯条','酸奶']
# 有两个连续的'酸奶',只会删除一个,因为删除的循环中,会对index有影响,会漏删
# ['火腿肠','辣条','面包','薯条','酸奶']
# 删除多个元素
# for i in list1:
# if i == '酸奶':
# list1.remove(i)
# print(list1)
list1=['火腿肠','酸奶','酸奶','辣条','面包','薯条','酸奶']
n = 0
while n<len(list1):
if list1[n] == '酸奶'
list1.remove('酸奶')
n+=1
-
几种delete的方式
list1=['火腿肠','酸奶','酸奶','辣条','面包','薯条','酸奶'] for i in list1: if i == '酸奶': list1.remove(i) print(list1) li=[1,1,1,2,3] elem = 1 result_li =[] for i in li: if i != elem: result_li.append(i) li = result_li print(li) list1=['火腿肠','酸奶','酸奶','辣条','面包','薯条','酸奶'] list2=[] for i in list1: if i !='酸奶': list2.append(i) print(list2) li =['酸奶',1,'酸奶','酸奶',1,1,'酸奶','酸奶',1,1,34,5] for i in li[::-1]: if i =='酸奶': li.remove(i) print(li)
-
insert
'''
修改
[1,2,3,4,5,6]
insert(位置,元素) # 元素占了位置,其他元素只能向后移动
index(元素):根据元素找该元素的位置下标,返回值是下标位置
修改元素值:
列表[index]=新值
'''
list1 = [1, 2, 3, 4, 5, 6]
# list1.insert(1, 8) # 插队
# print(list1)
# 直接定位那个位置进行修改
list1[1] = 8
print(list1)
position = list1.index(5) # 找到5的位置
list1[position] = 8
print(list1)
print('--$--'*20)
# clear
list1.clear()
print(list1)
P45 列表查找和del
'''
查找:
1.元素 in 列表 返回bool类型 元素 not in 列表
2.列表.index(元素) 返回元素下标位置,若没有此元素则报错
3.列表.count() 返回整数
'''
list1 = [1,2,45,7,9,10]
print(list1.count(8)) #若元素不存在 则返回0
print(list1.count(2)) #存在则返回个数
#
# del list1[3]
# print(list1)
#
# list1.pop(3)
# print(list1)
# list1.clear()
# del list1
#
# list1.append(100)
# print(list1)
list1 = [1, 34, 5, 78, 9, 5, 2]
list2 = list1
list2.append(88)
print(list1)
print(list2)
'''
[1, 34, 5, 78, 9, 5, 2, 88]
[1, 34, 5, 78, 9, 5, 2, 88]
因为list1把地址赋给了list2,它们指的地址是一样,
所以当list2里加88了,跟list1同一个地址,list1也会加88
所以打印的内容一样
'''
# list1.clear()
# print(list2)
del list2
print(list1) # [1, 34, 5, 78, 9, 5, 2, 88]
del list2
print(list1) # [1, 34, 5, 78, 9, 5, 2, 88]
# clear 清空的是房子的家具
# del 指针断掉,变量名也回收了,相当于没有钥匙了
a = 'hello'
b=a
c=a
del a
print(b)
print(c)
# hello
# hello
- del 可以删列表 也可以删字符串
P46 排序 翻转
'''
sort
reverse
'''
# 生成8个1-20之间的随机整数,保存到列表中,遍历打印
import random
numbers = []
for i in range(8):
ran = random.randint(1,20)
# print(ran)
numbers.append(ran)
print(numbers)
# reverse 没有排序,单纯反转
numbers.reverse()
print(numbers)
numbers.sort() # 默认升序,可以通过reverse参数控制升序还是降序
print(numbers)
# sort里面的reverse决定升降序,True 降序 False 升序
numbers.sort(reverse=True) # 降序
print(numbers)
numbers.sort(reverse=False) # 升序,默认
print(numbers)
'''
生成8个1-100之间的随机整数,保存到列表
键盘输入一个1-100之间的整数,将整数插入到排序后的列表中
e.g
[1,9,3,42,4]
[1,3,4,9,42]
5
[1,3,4,5,9,42]
'''
import random
list1=[]
for i in range(8):
ran = random.randint(1, 100)
list1.append(ran)
print(list1)
# 方法1
# num = int(input('输入1-100的整数:'))
# list1.insert(1,num)
# # list1.append(num)
# list1.sort()
# print(list1)
# 方法2
# num = int(input('1-100数字:'))
# # 有多少数字,就循环遍历多少次
# for i in range(len(numbers)):
# if (numbers[i] <= num) and (numbers[i+1]>num):
# numbers.insert(i+1,num)
# break
# print(numbers)
# 方法3
num = int(input('1-100:'))
for i in numbers:
if num <=i:
numbers.insert(numbers.index(i),num)
break
else:
numbers.append(num)'''
生成8个1-100之间的随机整数,保存到列表
键盘输入一个1-100之间的整数,将整数插入到排序后的列表中
e.g
[1,9,3,42,4]
[1,3,4,9,42]
5
[1,3,4,5,9,42]
'''
import random
list1=[]
for i in range(8):
ran = random.randint(1, 100)
list1.append(ran)
print(list1)
num = int(input('输入1-100的整数:'))
list1.insert(1,num)
list1.sort()
print(list1)
P47 冒泡排序
- 交换
# 交换
a = 2
b = 3
print(a,b)
# c = a
# a = b
# b = c
# print(a,b)
a,b=b,a
print(a,b)
a,b,c=b,a,b
print(a,b,c)
- 冒泡排序(练习)
num = [5, 1, 7, 6, 8, 2, 4, 3]
for i in range(0, len(num) - 1): # 控制轮数
for j in range(0, len(num) - 1 - i):
if num[j] > num[j + 1]: # 两两比较
a = num[j] # 交换
num[j] = num[j + 1]
num[j + 1] = a
print(num)
P48 元组
元组与列表类似,不同之处在于元组的元素不能修改(增删改),元组使用小括号(),列表使用方括号[]
'''
元组与列表类似,不同之处在于元组的元素不能修改(增删改)
元组使用小括号(),列表使用方括号[]
list 列表
tuple 元组
def:
名 = ()
注意:如果元组中只有一个元素,必须添加逗号 ('aa',) (1,) (2.8,)
下标+切片
方法:
count()
index()
关键字:
in, not in
for..in
while
转换
list(tuple)--->元组转成列表
tuple(list)--->列表转元组
'''
t1 = ()
print(type(t1)) # <class 'tuple'>
t2 = ('aa')
print(type(t2)) # <class 'str'>
t2 = ('aa',) # 加逗号才是元组类型
print(type(t2)) # <class 'tuple'>
t3 = ('a', 'b', 'c')
print(type(t3)) # <class 'tuple'>
# 下标和切片 字符串,列表,元组--->注意下标越界
print(t3[2])
# # 下面两种情况都会报错,因为不存在
# print(t3[9])
# print(t1[0])
print(t3[1:]) # ('b', 'c'),切的是元组,切出来的依然是元组
print(t3[::-1]) # ('c', 'b', 'a')
n = t3.count('a') # 计数
print(n)
t3 = ('a', 'b', 'c', 'a')
index = t3.index('a') # 0 根据元素获取下标位置
print(index)
index = t3.index('a', 1)
print(index) # 3
t3 = ('a', 'b', 'c', 'y', 'e', 'a')
# index = t3.index('a',1,5) #报错,没找到a,说明index('a',1,5)不包含5
index = t3.index('a', 1, 6) # 把5改成6就能找到a了
print(index)
# 支持if语句
if 'e' in t3:
print('zai')
else:
print('bucunzai')
# 支持for..in循环
for i in t3:
print(i)
# t3[0]='abc' #Tuples don't support item assignment
'''
# 需求,给元组修改里面的元素,直接修改不可行,
可以把元组转换成列表类型,缺点是占内存
'''
# list(tuple)--->元组转成列表
# tuple(list)--->列表转元组
t3 = list(t3)
print(type(t3)) # <class 'list'>
print(t3) # ['a', 'b', 'c', 'y', 'e', 'a']
t3.append('x')
print(t3) # ['a', 'b', 'c', 'y', 'e', 'a', 'x']
t3 = tuple(t3)
print(t3) # ('a', 'b', 'c', 'y', 'e', 'a', 'x')