输入:一组数字和数字0-9按升序重新定义的关系。
目标:根据重新定义的关系,必须按升序列出这组数字。
输入格式:第一行将包含一组数字。下一行将包含重新定义的升序中的数字0-9 边界条件:数字集的大小将为2到100 输出格式:按照空格分隔的重新定义的数字顺序,按升序排列的数字集。
示例1:
Input: 20 50 11 121
9231476058
Output: 50 11 20 121
说明:121是一个三位数字,因此是第一位的。根据redfeined order 2> 1>所以121比其他所有人都要大,最后也是如此。 20> 11> 50因而按升序排列,这是相反的。
示例2:
Input: 319 311 198 420
1948327605
Output: 319 311 420 198
说明:根据redfeined order 1> 4>在319和311中,1> 1。 9因此,最终的升序为319 311 420 198。
到目前为止我的解决方案:我想到将第一行输入添加到列表X中,然后使用自定义排序列表将其压缩。
x=[319,311,198,420]
y=[1,9,4,8,3,2,7,6,0,5]
l=[x for (y,x) in sorted(zip(Y,X))]
print l
l产生一个输出:[319,198,420,311]。鉴于预期产出为:[319,311,420,198]。
要么我的方法完全错误,要么需要进行微调 请帮忙。
答案 0 :(得分:1)
怎么样:
>>> x = [319,311,198,420]
>>> y = [1,9,4,8,3,2,7,6,0,5]
>>> d = {str(v): str(i) for (i, v) in enumerate(reversed(y))}
>>> sorted(x, key=lambda n: int(''.join(d[v] for v in str(n))))
[319, 311, 420, 198]
>>>
这将创建一个查找字典,其中所有整数都根据其索引给出一个值。
然后输入序列按照通过查找给予字典中每个整数的值计算的值进行排序。