【问题标题】:using aliasing to iterate through list once (python)使用别名遍历列表一次(python)
【发布时间】:2017-10-24 02:03:28
【问题描述】:

假设我有一个名为list 的列表,它由布尔值组成。还说我有一些(有效的)索引i,这是我想要切换值的list 的索引。

目前,我有:list[i] = not list[i]

但我的问题是,这不是重复list 两次吗?如果是这样,是否有办法通过别名设置临时值以仅遍历列表一次?

我尝试了以下方法:

temp = list[i]
temp = not temp

但这对我不起作用,它只切换了temp的值,而不是list[i]的值。

【问题讨论】:

  • doesn't this iterate through list twice? 是吗?你为什么这么认为?
  • 它根本不迭代列表?我不明白你的意思。

标签: python list pointer-aliasing


【解决方案1】:

您可以使用dis 模块https://docs.python.org/3/library/dis.html '在后台'查看一些方法

import dis


boolst = [True, True, True, True, True]

dis.dis('boolst[2] = not boolst[2]')
  1           0 LOAD_NAME                0 (boolst)
              2 LOAD_CONST               0 (2)
              4 BINARY_SUBSCR
              6 UNARY_NOT
              8 LOAD_NAME                0 (boolst)
             10 LOAD_CONST               0 (2)
             12 STORE_SUBSCR
             14 LOAD_CONST               1 (None)
             16 RETURN_VALUE

dis.dis('boolst[2] ^= True')
  1           0 LOAD_NAME                0 (boolst)
              2 LOAD_CONST               0 (2)
              4 DUP_TOP_TWO
              6 BINARY_SUBSCR
              8 LOAD_CONST               1 (True)
             10 INPLACE_XOR
             12 ROT_THREE
             14 STORE_SUBSCR
             16 LOAD_CONST               2 (None)
             18 RETURN_VALUE

【讨论】:

    猜你喜欢
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 2013-02-18
    相关资源
    最近更新 更多