本帖最后由 醉酒青牛 于 2017-10-9 11:27 编辑
出现这种问题,主要是for循环语句遍历列表元素出现的问题。因为列表本身是在删除元素,一直在更新为新的列表的。导致for循环语句中的遍历语句会跳过删除一个元素之后的下一个元素,如果碰巧下一个元素也是要删除的元素,就出现了问题。说起来比较拗口,我们举实例来说明:
>>> k = [1,1,3,5] 新建一个列表,包含元素1,1,3,5四个元素;
>>> for each in k: each去遍历列表k中的元素
if each == 1: 判定元素值为1时删除该元素
k.remove(each)
本来列表k中第一个元素为1,第二个元素为1,第三个元素为3,第四个元素为5
当判定到第一个元素时,k列表中把第一个元素删除,此时k列表变为第一个元素为1,第二个元素为3,第三个元素为5,回到for循环内,each要取出k列表中的第二个元素3,此时就把原本为k列表的第二个元素的1给漏过去了,导致出现没有删除掉指定元素。
>>> k #显示k的值,发现原本的第二个元素1没有被删除
[1, 3, 5]
>>> k
[1, 3, 5]
>>>
为了避免出现这种问题,我们引入一个新列表,专门存储不包含指定元素的列表内其他元素,则不会出现此问题,代码如下:
import string
import random
l=[]
a = string.ascii_uppercase
b = string.digits
for i in range(len(a)):
l.append(a[i])
for i in range(len(b)):
l.append(b[i])
l1 = [] #存放去除指定元素之后的l的列表元素
for i in l:
if i == 'O' or i=='S' or i == 'I' or i == 'Z' or i == '0' or i == '1' or i == '2' or i == '5':
continue
else:
l1.append(i)
j=random.sample(l, 12)
q=''.join(j)
print(q)