2016-05-09 4 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に保存し、ループが完了するたびに追加することができ、リストが大きくなったり大きくなったりします。

どうすればよいですか?なぜ私はリストの最後に値を追加することができず、既存のハッシュ値が存在するリスト全体を出力することができないのか、少し迷っています。私が今得意とするのは、ループが何回完了しても、1つのハッシュ値だけです。

グローバルリストにする必要はありますか?

答えて

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

これはうまくいきましたが、私が探していたものです。それを議論として渡すとは考えていませんでした。本当にありがとう。それが私にさせてくれたとき、これに答えるでしょう。 – LewisFletch

1

この行はリストに変数hashの内容をオンにしない - それは、新しい新鮮なリストにそこにあったものをすべて置きます:

hash_extend = [hash] 

これは、あなたが本当に欲しいものです:

hash_extend = list(hash) 

この方法の内容変数hashがリストになります。たとえば:あなただけのリストを拡張する必要がある場合、私は、変数hashすでに内容のiterableをすることを前提とするので

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

はまた、あなたがリストへの変換をスキップすることができます:

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

しかし、これは、関数を呼び出すたびにリストを拡張するつもりはありません。

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

をし、そのようにそれを呼び出す:これを行うには、2番目の引数として関数に渡し

store = stored_hash(hash, store) 
0

はしてもよいし、あなたがグローバルhashesリストを宣言することができます。

global hashes 
hashes = [] 

上記の部分を書くと、プログラム内でグローバルに使用できるようになります。

関連する問題