7-8 不按常理出牌的列表 - 实验4 装番茄和啤酒的容器 - 《Python编程基础及应用实验教程》(高等教育出版社)
分数 10
全屏浏览
切换布局
作者 海洋饼干叔叔
单位 重庆大学
下述程序从键盘读入多个以逗号分隔的元素并将其组织在一个列表中,然后遍历列表删除其中重复的元素。具体地,假设列表中存在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)
上述程序的运行结果为(第一行为测试输入):
4, 3, 2, 3, 2, 4, True
before: [4, 3, 2, 3, 2, 4, True]
after: [3, 3, 2, 4, True]
对照上述执行结果的第2行及第3行,显然程序的执行结果不符合设定目标。原列表中的3保留了两个!
【错误分析】
程序在遍历循环(第4行)的内部执行了移除列表元素的操作(第8行)。一边遍历列表一边修改列表甚至删除列表元素可能使得遍历发生混乱,产生意料之外的结果。
请修改上述程序,使其可以正常工作。
输入格式:
由逗号分隔的多个值
输出格式:
参考输出样例,注意不同元素在列表中的相对位置不应被改变
输入样例:
4, 3, 2, 3, 2, 4, True
输出样例:
before: [4, 3, 2, 3, 2, 4, True]
after: [3, 2, 4, True]
答案:
li= list(eval(input()))
print("before:", li)
unique_elements = []
for x in li[::-1]:
if x not in unique_elements:
unique_elements.insert(0, x)
print("after:", unique_elements)
#杰小韦,谁用你给的代码啊