python remove()使用注意事项

import math

def isPrime(x:int):
   if 0 not in [x%i for i in range(2,int(math.sqrt(x))+1)]:
       return True
   else:
       return False

lst = input().split()
new_lst = []
if len(lst)%2 == 1:
    lst.pop()
for i in range(0,len(lst)-1,2):
    new_lst.append(int(lst[i]+lst[i+1]))
new_lst = list(set(new_lst))
print(new_lst)
result_lst = []
for i in new_lst:
    if isPrime(i):
        result_lst.append(i)              #使用remove()删除会发生错误,因为当你删除了列表第一个元素,整个列表会前移,
        # 而这是要访问的第二个元素,其实是之前第三个元素前移后的结果,也就是说原先的第二个元素被跳过了。因此可以换个思路,
        #将不需要删除的元素用append()方法加入到新列表即可。
print(result_lst)

这是我在刷题过程中发现的一个细节上的问题,以前都没有注意到。首先代码段是我直接贴上来的,只需关注最后的6行(也就是从 for i in new_lst)那边开始。这个循环原先要实现的是删除new_lst列表中不是素数的元素,当然首先想到的就是用remove()方法来实现,但这是有问题的,具体的原因我也写在注释那边,应该挺清楚的。解决方法就是换个思路,将素数加入到新的列表即可。

你可能感兴趣的:(python,列表)