Python列表经典实例
list1 = []
character = input("请输入西游记中你喜欢的人物:")
while(character):
list1.append(character)
character = input("请输入西游记中你喜欢的人物:")
for i in range(0,len(list1)):
print(("你喜欢的人物是:%s")%list1[i])
请输入西游记中你喜欢的人物:孙悟空
请输入西游记中你喜欢的人物:猪八戒
请输入西游记中你喜欢的人物:沙悟净
请输入西游记中你喜欢的人物:蜘蛛精
请输入西游记中你喜欢的人物:
你喜欢的人物是:孙悟空
你喜欢的人物是:猪八戒
你喜欢的人物是:沙悟净
你喜欢的人物是:蜘蛛精
list1 = []
while(True):
grade_str = input("请输入学生成绩:")
if grade_str:
grade = int(grade_str)
list1.append(grade)
else:
break
for i in range(0,len(list1)):
print(("学生分数为:%d")%list1[i])
print("最高分是%d分"%max(list1))
print("最低分是%d分"%min(list1))
print("最高分是%d分"%(sum(list1)/len(list1)))
请输入学生成绩:25
请输入学生成绩:45
请输入学生成绩:75
请输入学生成绩:87
请输入学生成绩:3
请输入学生成绩:57
请输入学生成绩:45
请输入学生成绩:98
请输入学生成绩:36
请输入学生成绩:45
请输入学生成绩:24
请输入学生成绩:35
请输入学生成绩:45
请输入学生成绩:36
请输入学生成绩:37
请输入学生成绩:78
请输入学生成绩:
学生分数为:25
学生分数为:45
学生分数为:75
学生分数为:87
学生分数为:3
学生分数为:57
学生分数为:45
学生分数为:98
学生分数为:36
学生分数为:45
学生分数为:24
学生分数为:35
学生分数为:45
学生分数为:36
学生分数为:37
学生分数为:78
最高分是98分
最低分是3分
最高分是48分
list3 = []
while True:
a = 0
name = input("请输入学生姓名:")
if name:
for i in list3:
if name == i:
a += 1
if a == 0:
list3.append(name)
else:
print("姓名已经存在,请重新输入。")
else:
for i in range(len(list3)-1,-1,-1):
print(list3[i])
break
请输入学生姓名:张三
请输入学生姓名:李四
请输入学生姓名:王五
请输入学生姓名:刘德华
请输入学生姓名:张三
姓名已经存在,请重新输入。
请输入学生姓名:李四
姓名已经存在,请重新输入。
请输入学生姓名:张三丰
请输入学生姓名:李云龙
请输入学生姓名:张嘎
请输入学生姓名:
张嘎
李云龙
张三丰
刘德华
王五
李四
张三
list3 = []
while True:
a = 0
name = input("请输入学生姓名:")
if name:
if name not in list3:
list3.append(name)
else:
print("姓名已经存在,请重新输入。")
else:
for i in range(len(list3)-1,-1,-1):
print(list3[i])
break
请输入学生姓名:张三
请输入学生姓名:李四
请输入学生姓名:王五
请输入学生姓名:刘德华
请输入学生姓名:张三
姓名已经存在,请重新输入。
请输入学生姓名:李四
姓名已经存在,请重新输入。
请输入学生姓名:李云龙
请输入学生姓名:
李云龙
刘德华
王五
李四
张三
#要熟悉列表内存图,才能更好理解下面这个情况
list01 = ["张无忌","赵敏"] #list01中存放的是列表["张无忌","赵敏"]的地址
list02 = list01 #同理这是list01把存放的列表["张无忌","赵敏"]的地址交给list02
list01[0] = "无忌" #这段通过list01改变了列表的内容,而list02存放的内容是这个列表的地址,这个列表内容变了,所以print(list02[0])同样也会变
print(list02[0]) #因为list01和list02存放的都是这个列表的地址,并不是这个列表的内容,所以列表本身内容变,则都变。
无忌
#但是因为切片动作会复制生成一个相同的列表,所以利用切片赋列表时,情况又不一样。
list03 = ["张无忌","赵敏"] #list03中存放的是列表["张无忌","赵敏"]的地址
list04 = list03[:] #因为进行了切片操作,此时内存中生成了一个和list03一样的列表,并把它的地址赋给了list04
list03[0] = "无忌" #这段通过list03改变了列表的内容,而list02存放的内容是这个列表的地址,这个列表内容变了,所以print(list04[0])同样也会变
print(list04[0]) #因为是另外复制的列表,所以当list03内容变化时,list04并不会变。
张无忌
#就切片的情况又有不同的地方,假如列表中有元素也是列表时,因为外层列表存放的内层列表的内存地址,所以即便切片复制了新的列表,
#新的列表保存的地址也是不变的。
list05 = [800,[900,500]] #list05中存放的是列表的地址
list06 = list05[:] #因为进行了切片操作,此时内存中生成了一个和list05一样的列表,并把它的地址赋给了list06,但是复制生成的新列表之中
#保存的地址因为是一样的,所以指向的内容也是一样的。
list05[1][0] = 1000 #这段通过list05改变了列表中的列表[900,500]的内容,list06虽然是复制的,但相同的内存地址指向的也是[900,500]的地址
#[900,500]变成了[1000,500],所以print(list06[1][0])同样也会变
print(list06[1][0]) #画一下内存图就能清晰地分辨与上一种情况的差别。
1000
list02 = list01[:] 这种复制列表的方式叫做浅拷贝,只复制第一层,深层的变量不复制,例如列表中的列表就不进行复制。
list02 = list01.copy() 也是浅拷贝,功能与list02 = list01[:]相同。
#深拷贝,对对象完全拷贝,包括深层变量
import copy
list07 = [800,[900,500]]
list08 = copy.deepcopy(list07)
list07[1][0] = 1000
print(list08[1][0])
#深拷贝,对对象完全拷贝,包括深层变量
import copy
list07 = [800,[900,500]]
list08 = copy.deepcopy(list07)
list07[1][0] = 1000
print(list08[1][0])
900
list_1 = [54,25,12,42,35,17]
list_2 = []
for i in list_1:
if i > 30:
list_2.append(i)
list_1.remove(i)
print(list_1)
print(list_2)
[25, 12, 35, 17]
[54, 42]
list_01 = []
for i in range(0,5):
num = int(input("请输入数字%d:"%(i+1)))
list_01.append(num)
i += 1
print(list_01)
maxnum = list_01[0]
for i in list_01:
if i > maxnum:
maxnum = i
print("最大值是:%d"%maxnum)
请输入数字1:123
请输入数字2:5651
请输入数字3:6513
请输入数字4:15
请输入数字5:6516
[123, 5651, 6513, 15, 6516]
最大值是:6516
list_05 = [53,25,12,54,35,17]
max_num = list_05[0]
for i in list_05:
if i > max_num:
max_num = i
print("最大值是:%d"%max_num)
最大值是:54