我有一个学校作业从输入列表中删除特定元素。以下是具体内容:
你需要做什么:
例如: 如果输入是[1,2,3,4,3,6,3,8] 输出应为[1,2,3,4,3,6,8]
但是,你不能:
这是我到目前为止所得到的:
l=[]
mid=0
found=0
for m in range(0,10):
num=int(input("Enter the numbers for the list(10)"))
l.append(num)
nan=int(input("Enter the number which u want to remove"))
for i in range(0,10):
if l[i]==nan:
mid=i
for j in range(mid,10):
if l[j]==nan:
found=1
mid=j
for k in range(mid,9):
l[k]=l[k+1]
break
if nan not in l:
found==-1
if found==1:
l.pop()
print (l)
if found==-1:
print("Number doesnt exist in given list")
但我不明白该计划是如何运作的。它应该是删除输入元素的第二次出现,而不是最后一次出现。
比如说,如果清单是:[1,2,3,2,5,6,7,2,9,10] 结果不应该是:[1,2,3,5,6,7,2,9,10]? 如果没有,为什么? 如果有人可以向我解释,那将是一个很好的帮助!
答案 0 :(得分:0)
l = [1, 2, 3, 4, 3, 6, 3, 8]
seen = set()
duplicates = []
remove_after_occurrence = 3
for number in l:
if number not in seen:
seen.add(number)
else:
if number not in duplicates:
duplicates.append(number)
counter = 0
for remove in duplicates:
for index, number in enumerate(l):
if remove == number:
counter += 1
if counter == remove_after_occurrence:
l.pop(index)
counter = 0
print(l)
print(seen)
print(duplicates)
此解决方案使用一组来指示重复值。然后使用pop删除列表中的重复值。它更容易阅读。
答案 1 :(得分:0)
d = dict()
elements = [1, 2, 3, 4, 3, 6, 3, 8]
for i, element in enumerate(elements):
if elements.count( element ) > 1:
d[element] = i
for j in d.values():
elements.pop( j )
print elements
这会存储具有最新元素的重复元素的索引,然后逐个删除。