2016-05-09 94 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 = [] 

編寫上述部分將使其在您的程序中全局可用。