【问题标题】:python 3, difference in two tuple constructionspython 3,两个元组结构的区别
【发布时间】:2017-06-12 11:58:06
【问题描述】:

我有一个用于进行数学计算的脚本,我在其中使用字典来表示多项式。最初我的代码是这样开始的:

p = {}
p[(0,0,0)] = 1

然后,概括地说,我将第二个命令替换为:

p[tuple(numpy.zeros((3,),dtype=int))] = 1

我不明白为什么这个单一的变化会影响程序的结果。这些有何不同?

【问题讨论】:

  • “这个单一的变化会影响程序的结果”你需要解释这句话。
  • @Dunham:tuple(numpy.zeros((3,),dtype=int)) == (0,0,0)True。所以这意味着两者是等价的。除了引用相等之外,两者的工作方式应该完全相同。
  • 此外,也许更优雅的方法是使用d[(0,)*3]。更紧凑...
  • 如果不描述究竟是什么不起作用,您可以看到阅读您的问题的任何人都很难理解它,对吧?看看您是否可以创建一个显示错误行为的最小示例,以满足您的好奇心。
  • @Dunham 不同之处在于numpy 版本创建了一个numpy.int64s 的元组,而不是常规的Python ints;这不太可能产生影响,但在少数情况下可以,例如stackoverflow.com/questions/44302946/…

标签: python python-3.x numpy tuples


【解决方案1】:

正如我在评论中所说,不同之处在于numpy 版本创建了numpy.int64s 的tuple,而不是常规的Python ints:

>>> import numpy
>>> t1 = (0,0,0)
>>> type(t1[0])
<class 'int'>
>>> t2 = tuple(numpy.zeros((3,),dtype=int))
>>> type(t2[0])
<class 'numpy.int64'>

这不太可能产生影响,但在少数情况下会产生影响,例如 some itertools arguments。这个也有相关的bug issue,请关注这个空间。

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 2016-05-17
    • 2013-01-03
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多