输出互不相同且无重复数字的三位数
简化版:给定数字列表
解法一:
def threedata(nums):
"""
三个不重复且互不相同的三位数
params:
nums->数字列表
returns:
num_set->三位数集合
num_index->三哥数字在原列表下标集合
num_len->三位数个数
"""
num_set = list()
num_index = list()
for i in range(len(nums)):
for j in range(len(nums)):
for k in range(len(nums)):
if i !=j and i!=k and j!=k:
num_set.append(int(str(nums[i])+str(nums[j])+str(nums[k])))
num_index.append((str(i)+str(j)+str(k)))
num_len = len(num_set)
return num_set,num_index,num_len
if __name__ == '__main__':
nums = [1,2,3,4]
num_set,num_index,num_len = threedata(nums)
print(num_set)
print(num_index)
print(num_len)
解法二
```python
class train_1:
"""
三个不重复且互不相同的三位数
params:
nums->数字列表
returns:
num_set->三位数集合
num_index->三哥数字在原列表下标集合
num_len->三位数个数
"""
def __init__(self,nums):
self.nums = nums
def threedata(self):
num_set = list()
num_index = list()
for i in range(len(nums)):
for j in range(len(nums)):
for k in range(len(nums)):
if i !=j and i!=k and j!=k:
num_set.append(int(str(nums[i])+str(nums[j])+str(nums[k])))
num_index.append((str(i)+str(j)+str(k)))
num_len = len(num_set)
return num_set,num_index,num_len
if __name__ == '__main__':
nums = [1,2,3,4]
train_3d = train_1(nums)
num_set,num_index,num_len = train_3d.threedata()
print(num_set)
print(num_index)
print(num_len)
解法三
class train_1:
"""
三个不重复且互不相同的三位数
params:
nums->数字列表
returns:
num_set->三位数集合
num_index->三哥数字在原列表下标集合
num_len->三位数个数
"""
def __init__(self,nums):
self.nums = nums
def threedata(self):
#self.nums = set(self.nums)
num_set = list()
num_index = list()
for i in range(len(nums)):
for j in range(len(nums)):
for k in range(len(nums)):
if nums[i] !=nums[j] and nums[i]!=nums[k] and nums[j]!=nums[k]:
num_set.append(int(str(nums[i])+str(nums[j])+str(nums[k])))
num_index.append((str(i)+str(j)+str(k)))
num_len = len(num_set)
return num_set,num_index,num_len
if __name__ == '__main__':
nums = [1,2,2,1,4]
num = list(set(nums))#如果列表中数字有重复,先去重生成新列表
print(num)
train_3d = train_1(num)
num_set,num_index,num_len = train_3d.threedata()
print(set(num_set))
print(num_index)
print(num_len)
解法四
```python
def exercises_001():
'''
另一种解法
'''
arr = []
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
num = 100*i+10*j+k
if i!=j and j!=k and i!=k and num not in arr:# 互不相同且无重复数字的三位数
arr.append(num)
print(len(arr),arr)
if __name__ == '__main__':
exercises_001()
解法五
import itertools
def exercises_001_1(arr_list):
'''
其实python自带排列组合模块,可以直接调用。
'''
temp_arr = list(itertools.permutations(arr_list, 3)) # 排列 # A_4^3 = (4)!/(4-3)! = (4*3*2*1)/1 = 24
print(temp_arr)
arr = [100*t[0]+10*t[1]+t[2] for t in temp_arr]
return arr
if __name__ == '__main__':
arr_list=[1, 2, 3, 1]
arr=exercises_001_1(arr_list)
print(len(arr),arr)