【问题标题】:What does this mean in Python? arr[stack.pop()] = i这在 Python 中意味着什么? arr[stack.pop()] = i
【发布时间】:2020-10-07 11:59:03
【问题描述】:

我偶然发现了这行代码,并试图理解 rightspval[stack.pop()] = i,是什么意思?

        for i in range(1,n):
        while stack and A[stack[-1]] < A[i]:
            rightspval[stack.pop()] = i
        stack.append(i)

【问题讨论】:

  • 你有什么不明白的?

标签: python stack


【解决方案1】:

stack 是一个似乎被用作 lifo 堆栈的列表。 pop 从中删除一个条目并将其作为 rightspval 索引(字典中的键或数组中的索引)返回,无论引用的元素都设置为 I 的值。

【讨论】:

    【解决方案2】:

    如果没有更多关于Astack 内容的上下文,很难说这个算法是关于什么的。

    不过rightspval[stack.pop()]的操作可以解释一下。

    • 对于任何列表aa[x]a 的第x 个单元格,索引从0 开始;
    • 对于任何列表ss.pop()删除并返回s的最后一个元素;
    • a[s.pop()] = ... 等价于 x=s.pop(); a[x] = ...

    这是.pop 的示例:

    s = [10,11,12,13]
    print(s)
    # [10, 11, 12, 13]
    print(s.pop())
    # 13
    print(s)
    # [10, 11, 12]
    

    现在,结合a[ ]s.pop() 的示例:

    a = [100 + i for i in range(20)]
    s = [10, 11, 12, 13]
    print(a)
    # [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119]
    print(s)
    # [10, 11, 12, 13]
    a[s.pop()] = 'wouhou'
    print(a)
    # [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 'wouhou', 114, 115, 116, 117, 118, 119]
    print(s)
    # [10, 11, 12]
    

    由于s 的最后一个元素是13,这两行是等价的:

    a[s.pop()] = 'wouhou'
    s.pop(); a[13] = 'wouhou'
    

    小记:在这个解释中,我假设as 都是列表。实际上,a 可以是任何支持[ ] 操作的对象,例如列表、字符串或字典。

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2012-05-29
      • 2016-06-28
      • 1970-01-01
      相关资源
      最近更新 更多