题目:1.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
思路一:利用排列组合函数
通过排列组合permutations,首先得到所有互不相同且无重复数字的组合,得到列表元组;
from itertools import permutations
num = [1, 2, 3, 4]
result = []
#得到num的所有三个数字的排列组合
for i in permutations(num,3):
result.append(i)
print(result)#得到所有三个不重复数字的排列组合
[(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 4), (1, 4, 2), (1, 4, 3), (2, 1, 3), (2, 1, 4), (2, 3, 1), (2, 3, 4), (2, 4, 1), (2, 4, 3), (3, 1, 2), (3, 1, 4), (3, 2, 1), (3, 2, 4), (3, 4, 1), (3, 4, 2), (4, 1, 2), (4, 1, 3), (4, 2, 1), (4, 2, 3), (4, 3, 1), (4, 3, 2)]
列表推导式获取列表中的每个元组元素;
r1 = result[1] #取出列表中的第一个元素(该元素为元组:(1, 2, 4))
str将元组中的元素转换为字符串,join将每个元组中的字符串元素连接起来,得到要求的三位数;
''.join(str(i) for i in r1) #将该元组所有元素逐个转换为字符串,并通过join连接起来,得到三位数字符串'124'
int(''.join(str(i) for i in result[1])) #将得到的三位字符串转换为整数
实现过程:
from itertools import permutations
num = [1, 2, 3, 4]
result = []
#得到num的所有三个数字的排列组合
for i in permutations(num,3):
result.append(i)
#将每个元组元素转换为字符串并连接起来为一个三位数
strResult = []
for j in range(len(result)):
# print(result[j])
strResult.append(int(''.join(str(i) for i in result[j])))
print(strResult)
结果:
[123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432]
print(len(strResult))
24
思路二:通过多层循环
number = [1, 2, 3, 4]
count = 0
result=[]
for i in number:
for j in number:
for k in number:
if i !=j and j !=k and k !=i:
count += 1
# print(i,j,k)
result.append((i,j,k))
print(result)
print(count)
#输出
[(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 4), (1, 4, 2), (1, 4, 3), (2, 1, 3), (2, 1, 4), (2, 3, 1), (2, 3, 4), (2, 4, 1), (2, 4, 3), (3, 1, 2), (3, 1, 4), (3, 2, 1), (3, 2, 4), (3, 4, 1), (3, 4, 2), (4, 1, 2), (4, 1, 3), (4, 2, 1), (4, 2, 3), (4, 3, 1), (4, 3, 2)]
24