我有一个如下的生成器函数:
def myfunct():
...
yield result
Run Code Online (Sandbox Code Playgroud)
调用此函数的常用方法是:
for r in myfunct():
dostuff(r)
Run Code Online (Sandbox Code Playgroud)
我的问题是,有什么方法可以随时从发电机中获取一个元素吗?例如,我想做类似的事情:
while True:
...
if something:
my_element = pick_just_one_element(myfunct())
dostuff(my_element)
...
Run Code Online (Sandbox Code Playgroud) 我需要在Java中有一个自动按值排序的映射 - 这样当我添加新的键值对或更新现有键值对的值时,它会随时保持排序,甚至删除一些条目.
还请记住,这张地图将会非常庞大(数百万,甚至是数百万条的大小).
所以基本上我正在寻找以下功能:
假设我们有一个实现上述功能的"SortedByValuesMap"类,我们有以下代码:
SortedByValuesMap<String,Long> sorted_map = new SortedByValuesMap<String, Long>();
sorted_map.put("apples", 4);
sorted_map.put("oranges", 2);
sorted_map.put("bananas", 1);
sorted_map.put("lemons", 3);
sorted_map.put("bananas", 6);
for (String key : sorted_map.keySet()) {
System.out.println(key + ":" + sorted_map.get(key));
}
Run Code Online (Sandbox Code Playgroud)
输出应该是:
bananas:6
apples:4
lemons:3
oranges:2
Run Code Online (Sandbox Code Playgroud)
特别是,对我来说真正重要的是能够随时获得具有最低值的条目 - 使用如下命令:
smallestItem = sorted_map.lastEntry();
Run Code Online (Sandbox Code Playgroud)
哪个应该给我'橘子'条目
编辑:我是一个Java新手所以请详细说明你的答案 - 谢谢
EDIT2:这可能会有所帮助:我正在使用它来计算大文本文件中的单词(对于那些熟悉的人:特别是n-gram).所以我需要建立一个地图,其中键是单词,值是这些单词的频率.但是,由于限制(如RAM),我想只保留X最常用的单词 - 但事先你不能知道哪些是最常用的单词.因此,我认为它可能起作用的方式(作为近似)是开始计算单词,当地图达到上限(如1 mil条目)时,将删除最不频繁的条目,以便将地图的大小保持为总是1密耳.
我问这个问题是因为我需要构建一个特定的模块(aspell_python,http://wm.ite.pl/proj/aspell-python/ )来处理在Windows 7上运行的64位Python 2.6(64当然是机器).我也一直想知道如何使用C代码加速某些功能,所以我希望将来为Python创建自己的外部C模块.
谁能告诉我在C中成功构建64位Python扩展所需的步骤?我知道Python,我知道C,但我不了解Visual Studio或Windows特定的开发人员问题.我尝试使用Visual Studio 2008(这是此处唯一可用的商业产品)遵循Python网站(http://docs.python.org/extending/windows.html#building-on-windows)上的官方指南,但即使是最基本的例子也无法建立.
我想知道如何在Python中有效地添加稀疏矩阵.
我有一个程序将一个大任务分解为子任务并将它们分配到多个CPU.每个子任务产生一个结果(scipy稀疏矩阵格式为:)lil_matrix.
稀疏矩阵维度是:100000x500000,这是非常巨大的,所以我真的需要最有效的方法将所有生成的稀疏矩阵求和成一个稀疏矩阵,使用一些C编译方法或其他东西.
我即将参与NLP相关项目,我需要使用各种库.一些是在Java中,另一些是在C/C++中(对于需要更高速度的任务),最后一些是在Python中.我正在考虑使用Python作为"粘合剂",并为每个我想要做的依赖于不同语言的任务创建包装类.为了做到这一点,例如,包装类将执行java程序并使用管道与它通信.我的问题是:
你认为这对cpu要求高且重复性高的任务有用吗?或者管道通信增加的开销是否过重?
你会建议还有其他(最好是简单的)架构吗?
我有一个巨大的行分隔文本文件,我想对每一行进行一些计算.我需要制作一个多线程程序来处理它,因为每条线的处理需要花费最多的时间来完成而不是读取每一行.(瓶颈在于CPU处理,而不是IO)
我想出了两个选项:
1)从主线程打开文件,在文件句柄上创建一个锁并在工作线程周围传递文件句柄,然后让每个工作者直接读取文件
2)创建一个生产者/消费者设置,其中只有主线程具有对文件的直接读访问权,并使用共享队列将行提供给每个工作线程
要知道的事情:
你会选择哪个选项?为什么?