使用for语句对数组进行遍历的时候出现漏掉的情况
题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
str=[1,2,3,4]
str_1=[]
for i in range(100,1000):
if i%10 in str:
if i //100 in str:
if i//10%10 in str:
str_1.append(i)
continue
print(str_1)
str_2=str_1
for j in str_1:
if j//100 == j%10:
q=j
str_2.remove(q)
continue
if j//100 == j//10%10:
q=j
str_2.remove(q)
continue
if j//10%10 == j%10:
q=j
str_2.remove(q)
continue
continue
print(str_2)
print("满足的个数:",len(str_2))
发现for循环不能对所有的str_1的元素遍历,这里的原因是仅仅是把str_2的指针指向了str_1,在remove的时候,数组的下标会出现错误。
**解决办法:**把整个数组str_1重新赋值给str_2,可以用遍历的方式:
for i in range(len(str_1)):
str_2.append(str_1[i])
即可以得到正确的结果:
[123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432]
满足的个数: 24
更好的方案
把数字看成是三个字符组成合成的字符串来处理就可以了更加方便:
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if( i != k ) and (i != j) and (j != k):
print i,j,k