我正在尝试编写代码作为模拟器的一部分,该模拟器将读取数字列表并将它们与次要数字列表进行比较,并告诉您有多少数字小于第一个数字。例如
X=[5,20,14,1,7]
Y=[2,12,9,5,4,6]
代码将获取第一个X值5并查看有多少Y值小于5.因此输出Z看起来像
Z=[2,6,6,0,4]
我根本不熟悉这些概念,我想知道如何为这类工作制作功能。我将如何制作一个可以通过的for循环并比较那样的数字?也可以将列表从最小值组合到最大值,然后只搜索该列表中的X值并在列表中打印它的位置?
答案 0 :(得分:1)
您可以使用地图和列表理解在一行中执行此操作:
first = [5, 20, 14, 1, 7]
second = [2, 12, 9, 5, 4, 6]
z = map(lambda x: len([y for y in second if x > y]), first)
或没有lambda(如@RobertB所写):
z = [sum([x > y for y in second]) for x in first]
结果是:
[2, 6, 6, 0, 4]
答案 1 :(得分:1)
类似的东西:
// sort using a custom function object
class customLess{
Graph &_g;
public:
customLess(Graph g)
{
_g = g;
}
bool operator()(const Edge& e1, const Edge& e2)
{
return _g[e1].source < _g[e2].source || (_g[e1].source == _g[e2].source && _g[e1].target < _g[e2].target);
}
} ;
std::sort(edgs.begin(), edgs.end(), customLess(g));
答案 2 :(得分:0)
有很多方法可以解决上述问题。我会解释最简单的方法,虽然它不是最有效的方法
概念:嵌套循环
for x in range (0, a1_len-1):
for y in range (0, a2_len -1):
if a[y] < a[x]:
new_array.append(a[y])
print (new_array)
希望这有帮助
答案 3 :(得分:0)
另一个使用numpy广播的答案:
import numpy as np
np.apply_along_axis(np.sum,0,np.array(Y).reshape((len(Y),1))<X)