Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:算法-从平均值中收集项目_Python_Algorithm - Fatal编程技术网

python:算法-从平均值中收集项目

python:算法-从平均值中收集项目,python,algorithm,Python,Algorithm,不确定这是否是正确的位置,但我有一个关于算法的问题,我想不出一个有效的算法。 所以我想分享我的问题陈述:) 为了简化我试图解释的内容,让我创建一个假设的示例 假设,我有一个列表,其中包含一个对象,其中包含两件事 lets say product id and price 现在,这是一个很长的列表…有点像一个库存。。 在此基础上,我定义了三个价格段。。低、中、高价 然后是k1,k2,k3,其中k1,k2和k3是比率。 所以,现在的工作是,,,我必须从这个庞大的库存中收集产品,以这样的方式,低价位

不确定这是否是正确的位置,但我有一个关于算法的问题,我想不出一个有效的算法。 所以我想分享我的问题陈述:) 为了简化我试图解释的内容,让我创建一个假设的示例

假设,我有一个列表,其中包含一个对象,其中包含两件事

lets say product id and price
现在,这是一个很长的列表…有点像一个库存。。 在此基础上,我定义了三个价格段。。低、中、高价 然后是k1,k2,k3,其中k1,k2和k3是比率。 所以,现在的工作是,,,我必须从这个庞大的库存中收集产品,以这样的方式,低价位的产品有n1,中价位的产品有n2,高价位的产品有n3。。。式中n1:n2:n3==k1:k2:k3

现在,我如何有效地实现以下目标。 我的目标低价是100美元 我必须从这个系列中收集20种产品。。 中等价位大概是500美元 等等

所以我从100美元开始。。然后查找介于90和100之间以及介于100和110之间的项目 假设我发现区间1低(90100)有5种产品,区间1高(100110)有2种产品 然后,我转到下一个低间隔和下一个高间隔。 我一直这样做,直到我得到这个时间间隔内的产品数量

我该怎么做??还有一种情况,当特定价格范围内的产品数量少于我需要的数量时。。(也许中等价位是105美元…)。。那么在这种情况下我该怎么办。。 如果这不是正确的站台,请原谅。。从这个问题你可以看出,这更像是一个有争议的问题,而不是“我犯了这个错误”类型的问题。
谢谢

似乎您应该尝试数据库解决方案,而不是使用列表。查看sqlite。默认情况下,它是Python的

,您可能正在寻找它。

首先找到
n1
的第四个最小元素,让它成为
e1
,并且下限列表是所有元素,使得
元素接近1

如果分配哪些产品属于三个价格段从未改变,为什么不简单地建立三个列表,每个价格段中的一个产品列表(假设这些集合是不相交的)。 然后,您可以从这些列表中随机选择(根据您的喜好)。每个类别的项目数由比率给出

方法2

如果产品价格段分配是预先指定的,例如,通过在函数调用中传递每个段的相应价格值,您可能希望按价格对产品进行排序,并使用二进制搜索来选择(例如)。可以根据比率指定参数
m
。如果指定了最大距离,则可能会拒绝超出所需价格范围的产品

方法3


如果需要自动确定产品价格段分配,您可以应用您选择的算法,例如,将您的产品分配给,例如,
k=3
价格段。对于实际的产品选择,您可以如上所述进行类似操作。

如果您对项目N进行排序,然后根据比率,将N分别划分为n1:n2:n3,会更容易吗?@AlvinK。隐马尔可夫模型。。这可能是一个解决方案,尽管我无法真正使用我计算的一些统计数据。。但这绝对是一个非常棒的例子,说明了一点小小的假设是如何使编程变得简单的:)
getLowerRange(list,n):
  e <- select(list,n) 
  result <- []
  for each element in list:
     if element <= e:
         result.append(element)
  return result