2016-05-09 65 views
-1

我试图不断地向列表中添加值;保持这些值直到程序退出。追加到Python中的列表

import sha1 


def stored_hash(hash): 
    hashes = [] 
    hash_extend = [hash] 
    hashes.extend(hash_extend) 
    return hashes 

loop = 1 
while loop == 1: 
    data= raw_input('Enter text to hash: ') 
    hash = sha1.run(data) 
    store = stored_hash(hash) 
    print store 

我有一个叫sha1程序创建一个输入文本的哈希值。我想将该散列存储在hashes以上的列表中,并且每次循环完成时都可以添加更多,以便我的列表变得越来越大。

我该如何解决这个问题?我有点失落,为什么我不能将值附加到列表的末尾,然后用现有的哈希值列出整个列表。无论循环完成多少次,我现在所得到的都是一个散列值。

我是否需要将其设置为全局列表?

回答

4

只需通过列表作为参数:

import sha1 

def stored_hash(store, hash): 
    store.append(hash) 

store = [] 
loop = 1 
while loop == 1: 
    data = raw_input('Enter text to hash: ') 
    hash = sha1.run(data) 
    stored_hash(store, hash) 
    print store 
+0

ahhh这工作,正是我一直在寻找。甚至没有想过把它作为一个论点。谢谢一堆。会让我回答这个问题。 – LewisFletch

1

这条线不转的变量hash的内容列表 - 它把所有已经在那里了新的新名单:

hash_extend = [hash] 

这是你真正想要的:的

hash_extend = list(hash) 

这样的内容变量hash将变成一个列表。例如:

>>> ls = [1,2,3] 
>>> [ls] 
[[1, 2, 3]] 
>>> list(ls) 
[1, 2, 3] 

另外,如果你只需要扩展列表,你可以跳过转换到列表中,因为我假设变量hash已经内容的迭代:

def stored_hash(hash): 
    hashes = [] 
    hashes.extend(hash) 
    return hashes 

然而,这不会在每次调用函数时扩展列表。要做到这一点,它传递给函数的第二个参数:

def stored_hash(hash, prev_hash): 
    prev_hash.extend(hash) 
    return prev_hash 

,并调用它像:

store = stored_hash(hash, store) 
0

可能是,你可以在全球范围宣布hashes列表。

global hashes 
hashes = [] 

编写上述部分将使其在您的程序中全局可用。