目录
6: 遍历list,但是list中元素的数据类型不定,有可能有嵌套的list,嵌套的tuple,dict等。(没有多重嵌套)
8.1个纯数字的list中,分别输出奇数坐标数字或偶数坐标数字
1. 从键盘输入两个数,并比较其大小,直到输入e/E退出程序
5. 将一个多重嵌套的列表的元素进行互换,存到另一个同等维度的嵌套列表中,例如:[[1,2,3],[4,5,6]]互换后变成[[1,4],[2,5],[3,6]]
6. 有一个3 x 4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号,矩阵可以通过嵌套列表来模拟
9. 检查ipV4的有效性,有效则返回True,否则返回False,(提示使用split函数进行分割)
12. 一个包含多个数字的列表,请使用随机的方式,将每个数字+1后,生成新列表
13. 判断一个字符串是否为回文字符串。所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的。 比如"level" 、“aaabbaaa”
15. 不区分大小写对包含多个字符串对象的列表进行排序,显示排序后的结果还需要显示大小写不变的原字符串
19.找出一个多维数组的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点
20.写一个函数,识别输入字符串是否是符合 python 语法的变量名(不能数字开头、只能使用数字和字母以 及‘_’)
一、列表练习题:
1.操作一个list做增删改查操作(写一个图书管理系统)
def show_command():
command_info="""
欢迎进入图书馆管理系统!按键详情如下:
1.增加图书
2.删除图书
3.更改图书信息
4.查询图书
e(E).退出系统(e or E)
"""
global library_book_managelist
while True:
print(command_info)
command = input("请选择你的操作:")
if command == "e" or command == "E": # 退出系统
print("Bye!!!")
break
elif command == "1": # 添加图书
book_add(library_book_managelist)
elif command == "2": # 删除图书
book_del(library_book_managelist)
elif command == "3": # 修改图书
book_modify(library_book_managelist)
elif command == "4": # 查询图书
book_query(library_book_managelist)
else:
print("按键有误,请重新选择您的操作!")
def judge_input_proprity(property):
"""
:property:需要判断的输入信息,允许的值为["id","name","author"]
:return:返回不为空的property,或者返回None
"""
while True:
command = input("请输入图书%s(输入e或E退出!):" % property)
if property in ["id","name","author"]:
if command == "e" or command == "E":
print("退出输入图书%s!!!" % property, end="")
break
if len(command) == 0:
print("图书%s不能为空!请重新填写!" % property)
continue
else:
return command
else:
print("传入的%s有误!" % property)
continue
def book_add(book_list):
book=[] #一本书包含id,书名,作者
global no
book_id = no + 1
book_name = judge_input_proprity("name")
if book_name:# 书名合法时
book_author = judge_input_proprity("author")
if book_author: # 作者合法时
book.append(book_id)
book.append(book_name)
book.append(book_author)
book_list.append(book)
print("增加图书成功!")
no += 1
return book_list
else:
print("未增加图书!")
else:
print("未增加图书!")
def find_property(book_list,func):
"""
:param book_list: 图书列表
:param func: 值为query时,表示查询功能;值为del时,表示删除功能;值为modify时,表示修改功能;
:return: 返回查找结果列表,列表中为一个个book子列表;为空时表示未找到
"""
result = []
while True:
print("*"*30)
if func=="query":
print("欢迎进入图书馆查询系统!\n 1.按图书id查询! \n 2.按图书名称查询! \n 3.按图书作查询! \n e(E).不查询图书!")
elif func=="del":
print("欢迎进入图书馆查询系统!\n 1.按图书id删除! \n 2.按图书名称删除! \n 3.按图书作者删除! \n e(E).不删除图书!")
command = input("请选择你的操作:")
if command == "1":
book_id= judge_input_proprity("id")
# print("book_id=",book_id)
if book_id: # book_id正常
# print("book_list=",book_list)
for i in range(len(book_list)):
if book_list[i][0] == int(book_id):
result.append(book_list[i])
# print("result=",result)
if result: # result 有结果时
return result
else:
print("未找到id为%s的图书"%book_id)
print("*"*30)
break
elif command == "2":
book_name = judge_input_proprity("name")
if book_name: # book_name正常
for i in range(len(book_list)):
if book_list[i][1] == book_name:
result.append(book_list[i])
if result:
return result
else:
print("未找到名称为%s的图书"%book_name)
print("*"*30)
break
elif command == "3":
book_author = judge_input_proprity("author")
if book_author: # book_author正常
for i in range(len(book_list)):
if book_list[i][2] == book_author:
result.append(book_list[i])
if result:
return result
else:
print("未找到作者为%s的图书"%book_author)
print("*"*30)
break
elif command == "e" or command == "E":
print("退出%s图书操作!!!" % func)
print("*"*30)
break
else:
print("按键有误,请重新选择您的操作!")
def book_del(book_list):
result = find_property(book_list,"del")
if result:
for res in result:
print("成功删除图书:%s" %res)
book_list.remove(res)
print("*"*30)
def book_query(book_list):
"""
:param book_list: 图书列表
:param command: 代表的命令,1:按id查找 2:按图书名称查找 3:按图书作者查找 e/E:退出操作
:return: 返回查找结果列表,为空时表示未找到
"""
result = find_property(book_list,"query")
if result:
for res in result:
print("成功查询图书:%s" %res)
print("*"*30)
def book_modify(book_list):
result = find_property(book_list,"query")
if result:# 找到对应id的图书
print("找到的图书结果集:",result)
while True:
print("*"*30)
print("欢迎进入图书馆查询系统!\n 1.修改图书名称! \n 2.修改图书作者! \n e(E).不修改图书!")
command = input("请选择你的操作:")
if command == "1":
book_name = judge_input_proprity("name")
if book_name: # book_name不为None
for res in result: # 如果有多本书名称相同,一改全改
res[1] = book_name
print("修改成功,新图书信息为:%s" % res)
print("*"*30)
break
elif command == "2":
book_author = judge_input_proprity("author")
if book_author: # book_author不为None
for res in result: # 如果有多本书作者相同,一改全改
res[2] = book_author
print("修改成功,新图书信息为:%s" % res)
print("*"*30)
break
elif command == "e" or command == "E":
print("退出修改图书操作!!!")
print("*"*30)
break
else:
print("按键有误,请重新选择您的操作!")
no = 0
library_book_managelist = []
show_command()
print(library_book_managelist)
2.完成引用复制和非引用复制的一个例子
一、引用复制
1)使用copy.copy()
# 浅拷贝:新创建了一个类型跟原对象一样,其内容是原对象元素的引用【即:这个拷贝而来的对象本身是新的,但其内容不是】
print("1)使用copy.copy()")
original_list=[[1,2],'test',400,(5,"tuple",[300])]
copy_list = copy.copy(original_list)
# 改变前
print([id(x) for x in (original_list,copy_list)]) # 不是同一个对象,id不同
# 浅拷贝时,两个对象的子对象id完全一致
print([id(x) for x in original_list])
print([id(x) for x in copy_list])
print("*"*50)
#改变后
original_list.append(88) # 追加不可变类型元素,仅original_list改变
print("original_list=", original_list)
print("copy_list=", copy_list)
print("*"*50)
original_list[0][1]=20 # 修改可变类型子对象,original_list与copy_list均改变
print("original_list=", original_list)
print("copy_list=", copy_list)
print("*"*50)
copy_list[3][2].append('marked') # 修改可变类型子对象,original_list与copy_list均改变
print("original_list=", original_list)
print("copy_list=", copy_list)
print("*"*50)
# 修改后,子对象的id不变
print([id(x) for x in original_list])
print([id(x) for x in copy_list])
print("*"*50)
运行结果 :
1)使用copy.copy()
[2029433671104, 2029433670912]
[2029433671360, 2029433324912, 2029432028336, 2029433396608]
[2029433671360, 2029433324912, 2029432028336, 2029433396608]
**************************************************
original_list= [[1, 2], 'test', 400, (5, 'tuple', [300]), 88]
copy_list= [[1, 2], 'test', 400, (5, 'tuple', [300])]
**************************************************
original_list= [[1, 20], 'test', 400, (5, 'tuple', [300]), 88]
copy_list= [[1, 20], 'test', 400, (5, 'tuple', [300])]
**************************************************
original_list= [[1, 20], 'test', 400, (5, 'tuple', [300, 'marked']), 88]
copy_list= [[1, 20], 'test', 400, (5, 'tuple', [300, 'marked'])]
**************************************************
[2029433671360, 2029433324912, 2029432028336, 2029433396608, 2029432015824]
[2029433671360, 2029433324912, 2029432028336, 2029433396608]
**************************************************
2)使用完全切片[:] or [::]
print("2)使用完全切片[:]or[::]")
original_list=[[1,2],'test',400,(5,"tuple",[300])]
slice_list = original_list[:]
# 改变前
print([id(x) for x in (original_list,slice_list)]) # 不是同一个对象,id不同
# 两个对象的子对象id完全一致
print([id(x) for x in original_list])
print([id(x) for x in slice_list])
print("*"*50)
#改变后
original_list.append(88) # 追加/修改不可变元素,仅original_list改变
print("original_list=", original_list)
print("slice_list=", slice_list)
print("*"*50)
original_list[0][1]=20 # 修改可变类型子对象,original_list与slice_list均改变
print("original_list=", original_list)
print("slice_list=", slice_list)
print("*"*50)
slice_list[3][2].append('marked') # 修改可变类型子对象,original_list与slice_list均改变
print("original_list=", original_list)
print("slice_list=", slice_list)
print("*"*50)
# 修改后,子对象的id不变
print([id(x) for x in original_list])
print([id(x) for x in slice_list])
print("*"*50)
运行结果:
2)使用完全切片[:]or[::]
[2029433670464, 2029433671104]
[2029433670848, 2029433324912, 2029432028336, 2029433396864]
[2029433670848, 2029433324912, 2029432028336, 2029433396864]
**************************************************
original_list= [[1, 2], 'test', 400, (5, 'tuple', [300]), 88]
slice_list= [[1, 2], 'test', 400, (5, 'tuple', [300])]
**************************************************
original_list= [[1, 20], 'test', 400, (5, 'tuple', [300]), 88]
slice_list= [[1, 20], 'test', 400, (5, 'tuple', [300])]
**************************************************
original_list= [[1, 20], 'test', 400, (5, 'tuple', [300, 'marked']), 88]
slice_list= [[1, 20], 'test', 400, (5, 'tuple', [300, 'marked'])]
**************************************************
[2029433670848, 2029433324912, 2029432028336, 2029433396864, 2029432015824]
[2029433670848, 2029433324912, 2029432028336, 2029433396864]
**************************************************
3)使用list()函数
print("3)使用list()函数")
original_list=[[1,2],'test',400,(5,"tuple",[300])]
new_list = list(original_list)
# 改变前
print([id(x) for x in (original_list,new_list)]) # 不是同一个对象,id不同
# 两个对象的子对象id完全一致
print([id(x) for x in original_list])
print([id(x) for x in new_list])
print("*"*50)
#改变后
original_list.append(88) # 追加/修改不可变元素,仅original_list改变
print("original_list=", original_list)
print("new_list=", new_list)
print("*"*50)
original_list[0][1]=20 # 修改可变类型子对象,original_list与new_list均改变
print("original_list=", original_list)
print("new_list=", new_list)
print("*"