使用pop从列表中删除特定项目

时间:2016-12-04 13:52:01

标签: python list python-3.x loops

我有一个学校作业从输入列表中删除特定元素。以下是具体内容:

你需要做什么:

  1. 输入一个列表,至少有一个元素至少重复两次
  2. 从列表
  3. 中删除该元素的最后一个匹配项

    例如:   如果输入是[1,2,3,4,3,6,3,8]   输出应为[1,2,3,4,3,6,8]

    但是,你不能:

    1. 除了pop之外,在列表中使用删除方法;不允许使用del,remove等
    2. 反转列表,您必须从左到右阅读
    3. 这是我到目前为止所得到的:

      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]? 如果没有,为什么? 如果有人可以向我解释,那将是一个很好的帮助!

2 个答案:

答案 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

Ideone

这会存储具有最新元素的重复元素的索引,然后逐个删除。