我被赋予从剩下的两个数字中创建最小数字的任务。 但是我无法解决该任务,因为我的代码没有适当保留所有零。如果输入是
245
36
输出为23456,这是正确的。但是输入:
40
305
它输出:[0,0,3,4,5]
。但应为30045
。
这是我的代码:
f1 = [int(x) for x in input()]
f2 = [int(y) for y in input()]
f = f1+f2
for each in range(len(f)):
for eacc in range(each+1, len(f)):
if f[each] > f[eacc]:
f[each], f[eacc] = f[eacc], f[each]
for zero in range(len(f)):
if f[zero] == 0 and f[0] > 0:
f.remove(0)
f.insert(zero+1, 0)
break
print(f)
答案 0 :(得分:0)
n1 = 40
n2 = 305
# sort lexicograhically
ns = sorted(str(n1) + str(n2))
# move the first non-zero element to the start
i = ns.count('0')
if 0 < i < len(ns):
ns[0:0] = ns.pop(i)
答案 1 :(得分:0)
删除所有零。获取所有permutations并找到最小值。然后从索引1添加零
from itertools import permutations
a=list('40')+list('305')
a=list(map(int,a))
num_of_zero=a.count(0) # get the count of zeros
for i in range(num_of_zero):
a.pop(a.index(0))
new_list=list(min(list(permutations(a)))) # get all the permutations
for i in range(num_of_zero):
new_list.insert(1,0) # insert zeros at index 1 shifting all element to the right
print(''.join(map(str,new_list)))#30045
没有排列的sorted也可以使用
a=list('40')+list('305')
a=list(map(int,a))
num_of_zero=a.count(0)
for i in range(num_of_zero):
a.pop(a.index(0))
new_list=sorted(a)
for i in range(num_of_zero):
new_list.insert(1,0)
print(''.join(map(str,new_list)))#30045
使用numpy
import numpy as np
a=list('40')+list('305')
a=list(map(int,a))
num_of_zero=a.count(0)
new_list=sorted(a) # sorted will return [0,0,3,4,5]
I = np.nonzero(new_list) #return non_zero_array
if(len(I[0])>0):
first_non_zero_value=new_list.pop(I[0][0]) #get index of first element
new_list.insert(0,first_non_zero_value)
print(''.join(map(str,new_list)))#30045
答案 2 :(得分:0)
在这里您可以使用 itertools.permutations 。首先,我将使用map
将ints
更改为lists
。接下来,我将它们连接起来,并在list
中有一个5 ints
。然后使用排列,我们可以根据这些5 ints
生成所有可能的数字。现在,从我们的新列表中,我们可以使用* list理解来使用min
,并使用0
过滤掉以if i[0]
开头的所有项目。由于它是一个元组,因此我们必须将元素转换为str
,然后可以join
将它们转换为int
和print
from itertools import permutations
a = 40
b = 305
a = [*map(int, str(a))]
b = [*map(int, str(b))]
c = a + b
combo = list(permutations(c, len(c)))
res = min([i for i in combo if i[0]])
res = [str(i) for i in res]
print(''.join(res))
# 30045
如果a = 0, b = 0
是一个可能的输入,则try/except
块将是必需的
try:
res = min([i for i in combo if i[0]])
res = [str(i) for i in res]
print(int(''.join(res)))
except ValueError:
res = 0
print(res)