代码之家  ›  专栏  ›  技术社区  ›  thebjorn

如何将dict(zip(range(n),range(n))转换为python 3?

  •  4
  • thebjorn  · 技术社区  · 8 年前

    我刚刚运行了2to3的代码,看起来像这样(a):

    def idict(n):
        return dict(zip(range(n), range(n)))
    

    它产生了这个(b):

    def idict(n):
        return dict(list(zip(list(range(n)), list(range(n)))))
    

    二者都 dict zip 可以使用迭代器,那么为什么要进行这种转换?

    B似乎也很慢。测试

    python -m timeit -s "import B as t" "t.idict(10)"
    

    结果如下:

    ________________A______B______C___  
    Python 2.7.13   2.89   3.82   2.29
    Python 3.5.1    2.63   4.34   A
    

    即从2.89到4.34(+50%),默认翻译。

    问题。。(i)我不应该在python 3中使用原始代码有什么原因吗?(它产生了正确的结果,在我看来是合理的);(ii)2to 3是正确的工具(在转换~150kloc的python时,我们需要同时在2和3上运行)

    更新: 我已经添加了 dict(itertools.izip(xrange(n), xrange(n))) 作为表中的算法C。

    1 回复  |  直到 8 年前
        1
  •  4
  •   Jean-François Fabre    8 年前

    list

    print

    dict

    dict(zip(range(n), range(n)))
    

    dict(itertools.izip(xrange(n), xrange(n)))
    

    • python -3 has_key
    • py2to3
      • iteritems items
      • xrange range
      • dict.has_key unicode
    • -3