- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:我正在处理需要迭代的非常大的数据集。我的程序每五分钟添加大约 1300 行信息,每行 4 列。这意味着在一天的过程中,它每天收集大约 374,400 行信息或 1,497,600 个单元格。有 1300 行,因为程序每五分钟跟踪 1300 个项目。例如:
Item_Name Price Quantity_in_Stock Maximum_Stock_Level
----------
Soap 1.00 10 10
Frogs 1.25 12 16
Pickled Yogurt 1.35 7 8
Malodorous Ooze 6.66 6 66
我正在尝试统计一天中每个独特商品的库存水平的变化。我目前的技术是从 mysql 服务器中提取整个数据集。我依赖于项目名称、库存水平、最大库存和观察日期:
q = """SELECT Item_Name,Item_In_Stock,Item_Max,Observation_Date
FROM DB WHERE
Observation_Date>DATE_ADD(curdate(),INTERVAL -1 DAY) """
try:
x.execute(q)
conn.commit()
valueValue= x.fetchall() # The entire data set
except:
conn.rollback()
然后我遍历每个 Item_Name 并为每个项目找到所有匹配值:
for item in ItemNames:
matching = [s for s in valueValue if item[0] in s] # item[0] is an item name, i.e. Soap, Frogs, Pickled Yogurt, etc.
之后,我想找出当天购买的商品数量。这很棘手,因为元素会重新进货,因此我必须将每个时间间隔与最后一个时间间隔进行比较,以查看库存水平是否有任何变化(我不能只比较开始和结束):
for item in matching:
if not tempValue:
tempValue = item[1] #for first row, set value equal to first row
if tempValue > item[1]: #if last row greater than current row
buyCount = buyCount + (item[1]-tempValue) # Add the different to the buyCount (volume sold)
tempValue = item[1] #set tempValue for next row comparison
此方法有效,但速度相当慢。我将其计时为每个独特项目(在 1300 个中)计数迭代大约 2.2 秒。这意味着一整天需要大约 50 分钟来计算。如果可能的话,我想减少这个时间。我可以做些什么来改进这个搜索和统计功能?
编辑:我尝试让 MySQL 使用以下代码完成工作,但实际上它比使用 python 对所有代码进行排序要慢:
for item in getnameValues: # for each item name execute the following query
q = """SELECT Item_Name,Item_In_Stock,Item_Max,Observation_Date
FROM DB WHERE
Item_Name=%s and Observation_Date>DATE_ADD(curdate(),INTERVAL -1 DAY) """
try:
x.execute(q,item[0]) # executes the query for the current item
conn.commit()
valueValue= x.fetchall()
我假设我需要一种方法来遍历 MySQL 中的所有项目,然后让它将列表的列表发送回 python。对吧?
最佳答案
对不起,以目前的形式,这一切看起来都非常可怕。
首先,计算结果似乎取决于您运行它们的时间。你计算从昨天到现在的东西,而不仅仅是昨天。即今天的记录(在运行脚本之前插入),在今天和明天处理。
其次,您似乎对整个数据集进行了 len(item_names)
次迭代,即对 150 万行进行了 1300 次迭代!为什么不使用 defaultdict 在单次迭代中进行处理?或 Counter ?
第三,您应该更好地使用整数值而不是比较项目名称字符串。
关于python - 如何更有效地在 python 中搜索大列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18503315/
我是一名优秀的程序员,十分优秀!