编程题:不按常理出牌的列表 - 实验5 装番茄和啤酒的容器 - 《Python编程实验》
下述程序从键盘读入多个以逗号分隔的元素并将其组织在一个列表中,然后遍历列表删除其中重复的元素。具体地,假设列表中存在k个值为a的元素,删除前k-1个元素,保留最后一个,**不同元素在列表中的相对位置不应被改变**。
v = list(eval(input()))
print("before:",v)
for x in v:
cnt = v.count(x)
if cnt >= 2:
for i in range(cnt-1):
v.remove(x)
print("after:",v)
上述程序的运行结果为(第一行为测试输入):
1,7,6,7,7,True,'a',9.8,'a',True
before: [1, 7, 6, 7, 7, True, 'a', 9.8, 'a', True]
after: [6, 7, 9.8, 'a', True]
对照上述执行结果的第2行及第3行,显然程序的执行结果不符合设定目标。原列表中的1被错误删除了!<br><br>
【错误分析】<br>
程序在遍历循环(第4行)的内部执行了移除列表元素的操作(第8行)。一边遍历列表一边修改列表甚至删除列表元素可能使得遍历发生混乱,产生意料之外的结果。
<br><br>
请修改上述程序,使其可以正常工作。
### 输入格式:
由逗号分隔的多个值
### 输出格式:
参考输出样例,注意不同元素在列表中的相对位置不应被改变
### 输入样例:
in
1,7,6,7,7,True,'a',9.8,'a',True
### 输出样例:
out
before: [1, 7, 6, 7, 7, True, 'a', 9.8, 'a', True]
after: [6, 7, 9.8, 'a', True]
<br>
解题思路: 请参考《Python编程实验》(待出版)。<br> 该书是高等教育出版社《Python编程基础及应用》教材的配套实验指导书。
答案:若无答案欢迎评论
v = list(eval(input()))
print("before:",v)
for x in v:
cnt = v.count(x)
if cnt >= 2:
for i in range(cnt-1):
v.remove(x)
print("after:",v)
上述程序的运行结果为(第一行为测试输入):
1,7,6,7,7,True,'a',9.8,'a',True
before: [1, 7, 6, 7, 7, True, 'a', 9.8, 'a', True]
after: [6, 7, 9.8, 'a', True]
对照上述执行结果的第2行及第3行,显然程序的执行结果不符合设定目标。原列表中的1被错误删除了!<br><br>
【错误分析】<br>
程序在遍历循环(第4行)的内部执行了移除列表元素的操作(第8行)。一边遍历列表一边修改列表甚至删除列表元素可能使得遍历发生混乱,产生意料之外的结果。
<br><br>
请修改上述程序,使其可以正常工作。
### 输入格式:
由逗号分隔的多个值
### 输出格式:
参考输出样例,注意不同元素在列表中的相对位置不应被改变
### 输入样例:
in
1,7,6,7,7,True,'a',9.8,'a',True
### 输出样例:
out
before: [1, 7, 6, 7, 7, True, 'a', 9.8, 'a', True]
after: [6, 7, 9.8, 'a', True]
<br>
解题思路: 请参考《Python编程实验》(待出版)。<br> 该书是高等教育出版社《Python编程基础及应用》教材的配套实验指导书。
答案:若无答案欢迎评论