python-defaultdi的快速计算优化

2024-06-16 08:44:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的剧本

for b in range(len(xy_alignments.keys())):
                print str(b) + " : " + str(len(xy_alignments.keys()))
                x = xy_alignments.keys()[b][0]
                y = xy_alignments.keys()[b][1]
                yx_prob = yx_alignments[(y,x)] / x_phrases[x]
                xy_prob = xy_alignments[(x,y)] / y_phrases[y]
                line_str = x + "\t" + y + "\t" + str(yx_prob) + "\t" + str(xy_prob) + "\n"
                of.write(line_str.encode("utf-8"))
        of.close()

xy_alignmentsyx_alignmentsx_phrasesy_phrasespython defaultdict涉及数百万个键的变量。你知道吗

当我运行上面的循环时,它运行得非常慢。你知道吗

Python爱好者有什么建议让它快点吗?你知道吗

谢谢你


Tags: ofinforlenlinerangekeysprint
1条回答
网友
1楼 · 发布于 2024-06-16 08:44:49

这里有一个更惯用的版本,也应该更快。你知道吗

for (x, y), xy_alignment in xy_alignments.iteritems():
    yx_prob = yx_alignments[(y, x)] / x_phrases[x]
    xy_prob = xy_alignment / y_phrases[y]
    of.write(b'%s\t%s\t%s\t%s\n' % (x, y, yx_prob, xy_prob))

这个

  • 保存每次创建新列表的key()调用
  • 使用iteritems()保存一个dict查找
  • 使用字符串格式保存字符串分配,以及
  • 保存encode()调用,因为所有输出都在ascii范围内。你知道吗

相关问题 更多 >