2014-11-22 52 views
1

我想使用堆栈来颠倒顺序,如果j =“这是句子”,所以输出将是“句子是这样的”来做到这一点,我试着把它放在栈,然后弹出它们像颠倒python使用堆栈中的单词的顺序

stack.push(j.split(' '))  

然后弹出它作为

while not stack.is_empty() 
    print stack.data.pop(), 

但什么stack.push(j.split(”“))它把整个句子作为单一实体堆栈像

[['this','is','a','sentence']]

,因此当我弹出它它给人造成

['this','is','a','sentence']

意味着什么在nutshell.so都颠倒我应该如何分割,推动这个词在栈,这样我可以扭转词的顺序。

回答

2

stack.push将给定的元素/参数放置在堆栈的t 上。对于你来说,元素/参数是整个列表。您需要分别推送列表中的每个元素。因此,更换:

stack.push(j.split(' ')) 

由:

for i in j.split(): 
    stack.push(i) 
1

首先stack.push的(j.split(”“))犯规返回splited话。它返回一个带有拼写单词的对象。因此,当你将j.split('')推入堆栈时,它实际上会将所有单词作为一个对象来推送。最后,当你加入时它返回最后一个条目,那就是对象['this','是','a','句子']。

class Stack(): 

    def __init__(self): 
    self.items = [] 

    def isEmpty(self): 
    return self.items == [] 

    def push(self, item): 
    return self.items.append(item) 

    def pop(self): 
    return self.items.pop() 

    def getElements(self): 
    return self.items 

    def peek(self): 
    return self.items[len(self.items)-1] 

    def size(self): 
    return len(self.items) 

j="this is sentence" 
stack = Stack() 
jj = j.split(' ') 
for word in jj: 
    stack.push(word) 
print stack.getElements() 
print stack.peek() # shows you latest (last) value of array 
print stack.pop() 

在代码中,您会发现遍历对象并将每个单词推入堆栈。然后只需简单地弹出每个单词。

+0

Thanx此解决方案也有帮助 – 2014-11-22 19:04:05

0

stack.push(*j.split(' '))

Python不考虑拆分为参数列表中返回的列表中,除非你明确指定使用星号。否则,它会简单地推栈上的列表

+0

它没有工作它给了一个类型错误:push()需要2个参数(给出4) – 2014-11-22 19:10:21

+0

嗯,你是对的。我的错。在这种情况下,您需要像上面所说的那样一个一个地反复推送它。 – AllwinP 2014-11-23 04:20:24