【问题标题】:dictionary and stack in python problempython问题中的字典和堆栈
【发布时间】:2011-03-17 10:57:06
【问题描述】:

我制作了一本字典,并将字典的键放在一个列表中。我的列表包含这样的元素:

s =  [((5, 4), 'South', 1), ((4, 5), 'West', 1)]

我从这里做了一个字典:

child = dict((t[0], t[1]) for t in s)

keys = child.keys()
print keys

输出为:[(4, 5), (5, 4)]

现在我需要将 (4,5) 和 (5,4) 放入堆栈。我该怎么办?

我试过了,但是当我从堆栈中弹出时,它会将 2 个元素放在一起。 像 stack.pop() - output is : [(4, 5), (5, 4)]。我要一个一个弹出... (4,5) 然后 (5,4)

【问题讨论】:

  • 你能澄清一下吗?你在做什么,你认为它在做什么是错误的,你希望它做什么?
  • 堆栈在哪里/是什么?
  • 请再次查看问题...我已经进行了更改
  • 我不明白。 [(4,5),(5,4)].pop() 返回(5,4) ...
  • 这个问题需要大量澄清。我希望 SO 有一个用于提问的模板,其中包含“我尝试了什么”和“它应该是什么样子”之类的部分。

标签: python stack


【解决方案1】:

您可以将列表用作堆栈:

stack = list(child.keys())
print stack.pop()
print stack.pop()

结果:

(5, 4) (4, 5)

重要提示:字典的键没有排序,因此如果您希望项目按特定顺序排列,则需要自己处理。例如,如果您希望它们按正常排序顺序排列,您可以使用sorted。如果您希望它们以与它们在 s 中的顺序相反的顺序弹出,您可以跳过转换为字典,直接从 s 转到您的堆栈:

stack = [x[0] for x in s]
print stack.pop()
print stack.pop()

结果:

(4, 5) (5, 4)

【讨论】:

    【解决方案2】:

    我认为用户想要这个:

    # python
    > stack = [(4, 5), (5, 4)]
    > stack.pop(0)
    (4,5)
    > stack.pop(0)
    (5,4)
    

    只是提醒一下,这不是一个合适的堆栈。这是一个合适的堆栈:

    # python
    > stack=[]
    > stack.append( (4,5) )    
    > stack.append( (5,4) )
    > stack.pop()
    (5,4)
    > stack.pop()
    (4,5)
    

    【讨论】:

      【解决方案3】:

      使用

      element = stack[0]
      if len(stack) > 0:
         stack = stack[1:]
      
      print element
      

      但它不是那种堆栈:/

      【讨论】:

      • @shilpa,推入和弹出列表一个合适的堆栈。 push 放在末尾,pop 从末尾删除。
      • 基本上是一样的,你可以把它“包装”在一个自己的类中并调用它堆栈(用你的函数名等等)
      猜你喜欢
      • 2013-12-09
      • 2021-04-13
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2021-09-02
      相关资源
      最近更新 更多