小编Tal*_*iss的帖子

使用"if"过滤器在迭代器上循环的单行?

愚蠢的问题:
我有一个简单的for循环,后跟一个简单的if语句:

for airport in airports:
    if airport.is_important:
Run Code Online (Sandbox Code Playgroud)

而且我想知道我是否能以某种方式将其写成单行.
所以,是的,我可以这样做:

for airport in (airport for airport in airports if airport.is_important):
Run Code Online (Sandbox Code Playgroud)

但它看起来如此愚蠢和冗余(for airport in airport for airport in airports...).
有没有更好的办法?

python

55
推荐指数
4
解决办法
8万
查看次数

使用Pydev进行连续单元测试(Python和Eclipse)

有没有办法将背景单元测试与Pydev Eclipse环境集成?

我的单元测试运行良好,但我希望将它们集成到基于源文件更改的后台运行(例如使用nose)并将结果集成回Eclipse(当测试使用控制台失败时,我正在考虑大红色X和跟踪日志视图).

不,在侧面运行鼻子的命令提示符不计算在内.

我在开发RoR时已经有了这个Eclipse集成.

谢谢,

塔尔.

编辑:查看新的Pydev(1.6.4)http://pydev.org/manual_adv_pyunit.html

python unit-testing pydev

43
推荐指数
3
解决办法
1万
查看次数

真实世界的错字统计?

我在哪里可以找到一些真实的拼写错误统计数据?

我试图将人们的输入文本与内部对象进行匹配,人们往往会犯拼写错误.
有两种错误:

  1. typos - "Helllo"而不是"Hello"/"Satudray"而不是"Saturday"等.
  2. Spelling - "Shikago"而不是"芝加哥"

我使用 Damerau-Levenshtein距离进行拼写错误,使用Double Metaphone进行拼写(Python实现此处此处).

我想专注于Damerau-Levenshtein(或简单地说edit-distance).教科书实现总是使用'​​1'来表示删除,插入替换和转置的权重.虽然这很简单并且允许很好的算法但它与"现实"/"真实世界概率"不匹配.

例子:

  • 我确定"Helllo"("Hello")的可能性大于"Helzlo",但它们距离都是1个编辑距离.
  • 在QWERTY键盘上,"Gello"比"Qello"更接近"Hello".
  • Unicode音译:"慕尼黑"和"慕尼黑"之间的"真实"距离是多少?

删除,插入,替换和转置的"真实世界"权重应该是什么?

即使是Norvig非常酷的拼写校正器也使用非加权编辑距离.

BTW-我确定权重需要是函数而不是简单的浮点数(根据上面的例子)......

我可以调整算法,但在哪里可以"学习"这些权重?我无法访问Google规模的数据 ...

我应该猜猜他们吗?

编辑 - 尝试回答用户问题:

  • 由于上述原因,我当前的非加权算法在遇到拼写错误时经常失败."星期四回归":每个"真人"都可以很容易地告诉周四比周二更有可能,但他们都是1编辑距离!(是的,我会记录并衡量我的表现).
  • 我正在开发NLP旅行搜索引擎,因此我的词典包含~25K目的地(预计将增长到100K),时间表达式~200(预期1K),人物表达式~100(预期300),货币表达式~100(预期500 ),"胶水逻辑词"("从","美丽","公寓")~2K(预计10K)等...
  • 对于上述每个单词组,编辑距离的使用是不同的.我尝试"在明显时自动纠正",例如,与字典中的另一个单词相距1个编辑距离.我有许多其他手动调整的规则,例如Double Metaphone修复,距离长度> 4的字典单词不超过2个编辑距离...当我从现实世界输入中学习时,规则列表继续增长.
  • "你的门槛中有多少对字典条目?":嗯,这取决于"花式加权系统"和现实世界(未来)输入,不是吗?无论如何,我进行了大量的单元测试,因此我对系统所做的每一项更改都会使其更好(当然,基于过去的输入).大多数6个字母的单词距离与另一个字典条目相距1个编辑距离的单词在1个编辑距离内.
  • 今天,当有两个字典条目与输入相同的距离时,我尝试应用各种统计数据来更好地猜测用户的意思(例如,巴黎,法国更有可能出现在我的搜索中,而不是Pārīz,伊朗).
  • 选择错误单词的成本是将半随机(通常是荒谬的)结果返回给最终用户并可能失去客户.不理解的成本稍微低一些:用户将被要求改写.
  • 复杂的成本值得吗?是的,我确定是的.你不会相信人们在系统中投入的拼写错误,并希望它能理解,我确信可以使用Precision和Recall中的提升.

python fuzzy-search machine-learning spelling

41
推荐指数
3
解决办法
6877
查看次数

在pyparsing之后的下一步是什么?

作为大型纯Python应用程序的一部分,我为pyparsing开发了一个巨大的语法.我已经达到了性能调整的极限,我正处于收益递减让我开始寻找其他地方的地步.是的,我想我知道大部分提示和技巧,并且我已经将我的语法和应用程序描述为灰尘.

接下来是什么?

我希望找到一个解析器,它给我相同的可读性,可用性(我使用许多高级的pyparsing功能,如parse-actions来启动正在解析的输入的后处理)和python集成但是在10×表现.

我喜欢语法是纯Python的事实.

我所有的基本块都是正则表达式,所以重用它们会很好.

我知道我不能拥有所有东西所以我愿意放弃今天的一些功能来达到要求的10倍性能.

我从哪里开始?

python parsing pyparsing

20
推荐指数
1
解决办法
3815
查看次数

在Python中自动测试性能的适当方法(适用于所有开发人员)?

我们的Python应用程序(一个很酷的Web服务)有一整套测试(单元测试,集成测试等),所有开发人员必须在提交代码之前运行它们.
我想在套件中添加一些性能测试,以确保没有人添加使我们运行得太慢的代码(对于一些相当随意的慢速定义).
显然,我可以将一些功能收集到测试中,计算时间并与某个预定义的阈值进行比较.

棘手的要求:

  1. 我希望每个开发人员能够在他的机器上测试代码(因CPU功率,操作系统(!Linux和某些Windows)和外部配置而异 - Python版本,库和模块是相同的).测试服务器虽然通常是一个好主意,但并不能解决这个问题.
  2. 我希望测试是DETERMINISTIC - 无论运行测试的机器上发生了什么,我都希望多次运行测试以返回相同的结果.

我的初步想法:

  • 每次运行测试时都要使用timeit并对系统进行基准测试.将性能测试结果与基准进行比较.
  • 使用cProfile检测解释器以忽略"外部噪声".我不确定我是否知道如何阅读pstats结构,但我确信它是可行的.

其他想法?

谢谢!

塔尔.

python performance automated-tests

16
推荐指数
1
解决办法
3497
查看次数

谜团无视蛮力的方法?

我买了一张空白的DVD来录制我最喜欢的电视节目.它带有20位数的贴纸.每个'0' - '9'中的2个.
我认为用数字标记我的新DVD收藏品是个好主意.我在录制的第一张DVD上贴了"1"标签,将19个剩余的贴纸放在抽屉里.
第二天,我买了另一张空白DVD(用它收到20张新贴纸),在录制完这个节目之后,我将它标记为"2".
然后我开始疑惑:贴纸什么时候会用完,我将无法再贴上DVD标签了?
几行Python,不是吗?

你能提供能够在合理的运行时间内解决这个问题的代码吗?

编辑:蛮力只需要太长时间才能运行.请改进您的算法,以便您的代码在一分钟内返回正确答案?

额外的功劳:如果DVD附带3个贴纸的每个数字怎么办?

python puzzle math

13
推荐指数
3
解决办法
702
查看次数

内存优化的Python技巧

我需要优化应用程序的RAM使用率.
请不要在讲课时告诉我在编写Python时我不应该关心内存.我有一个内存问题,因为我使用非常大的默认字典(是的,我也想要快速).我目前的内存消耗是350MB并且还在增长.我已经不能使用共享主机了,如果我的Apache打开更多进程,内存会翻倍并增加三倍......而且价格昂贵.
我做了大量的分析,我确切地知道我的问题在哪里.
我有几个带有Unicode密钥的大型(> 100K条目)词典.字典从140字节开始并且增长很快,但更大的问题是密钥.Python优化了内存中的字符串(或者我已经读过),因此查找可以进行ID比较('实际').不确定这对于unicode字符串也是如此(我无法'实习'它们).
存储在字典中的对象是元组列表(an_object,int,int).

my_big_dict [some_unicode_string] .append((my_object,an_int,another_int))

我已经发现拆分到几个字典是值得的,因为元组占用了大量的空间......
我发现在使用它们作为键之前我可以通过散列字符串来节省RAM!但是,遗憾的是,我遇到了32位系统的生日碰撞.(附带问题:我可以在32位系统上使用64位密钥字典吗?)

Linux(生产)和Windows上的Python 2.6.5.有关优化字典/列表/元组的内存使用的任何提示?我甚至想过使用C - 我不在乎这段很小的代码是否丑陋.这只是一个独特的位置.

提前致谢!

python optimization memory-management

10
推荐指数
1
解决办法
9014
查看次数

了解Python分叉和内存分配错误

我有一个内存密集型的Python应用程序(介于几百MB到几GB之间).
我有几个非常小的Linux可执行文件,主应用程序需要运行,例如

child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
Run Code Online (Sandbox Code Playgroud)

当我运行这些外部实用程序(一次,在长主进程运行结束时)使用subprocess.Popen我有时得到OSError: [Errno 12] Cannot allocate memory.
我不明白为什么......请求的过程很小!
系统有足够的内存用于更多的shell.

我正在使用Linux(Ubuntu 12.10,64位),所以我猜Subprocess调用了Fork.
而Fork分叉我现有的进程,从而使消耗的内存量增加一倍,并且失败了?
"写字复制"怎么了?

我可以在没有fork的情况下生成一个新进程(或者至少没有复制内存 - 重新启动)?

有关:

fork(),vfork(),exec()和clone()之间的区别

fork()和内存分配行为

Python subprocess.Popen错误与OSError:[Errno 12]一段时间后无法分配内存

使用subprocess.Popen的Python内存分配错误

python linux fork

9
推荐指数
1
解决办法
5482
查看次数

面料的独立fabfile?

是否有可能使fabfile独立?
我不太喜欢运行外部工具'fab'.如果我设法将fabfile独立运行,我可以在(Eclipse/Pydev)IDE中运行该文件,轻松调试它,使用项目配置和路径等.
为什么这不起作用:

from fabric.api import run

def host_type():
    run('uname -s')

if __name__ == '__main__':
    host_type()    
Run Code Online (Sandbox Code Playgroud)

python fabric

8
推荐指数
1
解决办法
4361
查看次数

我可以关闭隐式Python unicode转换来查找我的混合字符串错误吗?

在分析我们的代码时,我惊讶地发现数百万次调用
C:\ Python26\lib\encodings\utf_8.py:15(解码)

我开始调试,发现在我们的代码库中存在许多小错误,通常将字符串与unicode进行比较或添加sting和unicode.Python慷慨地解码字符串并在unicode中执行以下操作.

多么体贴.但是很贵!

我精通unicode,读过Joel SpolskyDive Into Python ......

我尝试将代码内部仅保留在unicode中.

我的问题 - 我可以关闭这个pythonic好人行为吗?至少在我发现所有这些错误并修复它们之前(通常通过添加一个u'u')?

其中一些非常难找(一个变量有时是一个字符串......).

Python 2.6.5(我不能切换到3.x).

python debugging unicode decoding

7
推荐指数
1
解决办法
1711
查看次数