2017-12-28 42 views
0

50個の乱数からなる2つのリスト( "lstA"、 "lstB")を作成したいとします。次に、2つのリストと、3番目のリスト( "lstOvrlp")に入れたいと思われる重複を比較したいと思います。私はその3番目のリストの長さをとり、それを4番目のリスト( "lstC")に入れたいと思います。新しいリストevery Whileループ

次は、この基本的なプログラムを10回ループさせたいとします(この部分のユーザー入力は後で追加します)。

これは、これまで私が持っているコードです:

def main(): 

     import random 

     lstA = [] 
     lstB = [] 
     lstC = [] 



     lstA = random.sample(range(1, 101), 50) 
     lstB = random.sample(range(1, 101), 50) 

     lstOvrlp = set(lstA) & set(lstB) 

     while len(lstC) <= 10: 
      print("This is list A:", lstA) 
      print("\n") 
      print("This is list B:", lstB) 
      print("\n") 
      print("This is the overlap between the two lists:", lstOvrlp) 

      numinC = len(lstOvrlp) 
      print("Number in common: ", numinC) 
      print("\n") 

      lstC.append(numinC) 
      print(lstC) 



    main() 

問題ではなくループを通るたびに乱数を吐きよりも、プログラムだけで何度も何度もその結果同じ番​​号を再使用していることです「lstC」の同じオーバーラップ数と結果的に同じ長さ。多分私が知りませんがランダムに他の機能があるかもしれませんが、私はそれを見つけることができません。

"lstC"がさまざまなエントリで終わるように、プログラムがループするたびに "lstA"と "lstB"に新しいバッチ番号があることを望みます。私はデータを扱ういくつかの練習をしようとしていますが、結局私はこの情報に関する平均的な統計分析とそれ以外の単純な統計分析を実行します。

私はここにある誤りを指摘できませんが、私はそれらがたくさんあることを保証することができますので、忍耐してください。

ありがとう

+0

'random.sample'生成**を** whileループ内に配置する必要があります。さもなければそれらを生成し(1回)、* then *ループを実行しますが、ランダムサンプルを再度生成しません。 – BorrajaX

+0

変更しないとどのように変化すると思いますか? –

+0

ループ内にlstAとlstBのサンプルを生成する必要があります:) – Ejaz

答えて

0

Pythonのプログラムは順番に実行されます。つまり、割り当てを確認すると、その割り当てが実行され、割り当てが実行されます。 の前にのループを割り当てると、そのループの繰り返しごとに値が同じになります。 の中にのループを割り当てると、繰り返しごとに変化します。私はあなたが望むものが後者であると信じています。

よりもむしろ

lstA = random.sample(range(1, 101), 50) 
lstB = random.sample(range(1, 101), 50) 
lstOvrlp = set(lstA) & set(lstB) 
while len(lstC) <= 10: 
    ... 

はあなたがかなり接近していた

while len(lstC) <= 10: 
    lstA = random.sample(range(1, 101), 50) 
    lstB = random.sample(range(1, 101), 50) 
    lstOvrlp = set(lstA) & set(lstB) 
    ... 
0

を考えます! lstA = random.sample(range(1, 101), 50)lstB = random.sample(range(1, 101), 50)をwhileループの内側に移動するだけで、新しい番号が割り当てられます。これを試して。

import random 
def main(): 


    while len(lstC) <= 10: 
     lstA = random.sample(range(1, 101), 50) 
     lstB = random.sample(range(1, 101), 50) 

     lstOvrlp = set(lstA) & set(lstB) 
     print("This is list A:", lstA) 
     print("\n") 
     print("This is list B:", lstB) 
     print("\n") 
     print("This is the overlap between the two lists:", lstOvrlp) 

     numinC = len(lstOvrlp) 
     print("Number in common: ", numinC) 
     print("\n") 

     lstC.append(numinC) 
     print(lstC) 



main() 
0

あなたの問題は、あなたのwhileループの中で、あなたがlstAlstB、またはlstCを変更していないことです。代わりに、次のことを試してください。

def main(): 

    import random 

    lstA = [] 
    lstB = [] 
    lstC = [] 

    while len(lstC) <= 10: 
     lstA = random.sample(range(1, 101), 50) 
     lstB = random.sample(range(1, 101), 50) 

     lstOvrlp = set(lstA) & set(lstB) 
     print("This is list A:", lstA) 
     print("\n") 
     print("This is list B:", lstB) 
     print("\n") 
     print("This is the overlap between the two lists:", lstOvrlp) 

     numinC = len(lstOvrlp) 
     print("Number in common: ", numinC) 
     print("\n") 

     lstC.append(numinC) 
     print(lstC) 


main() 
1

私が交差点を取得するためにセットとしてリストを比較し、その後発電機とrandom.randintを使用すると思います。

from random import randint 


def random_list(): 
    for _ in range(50): 
     yield randint(1, 101) 


list_c = [] 

for _ in range(10): 
    list_a = list(random_list()) 
    list_b = list(random_list()) 
    print('list_a: {}'.format(list_a)) 
    print('list_b: {}'.format(list_b)) 

    # This is actually called an intersection, not an overlap. 
    list_intersect = set(list_a) & set(list_b) 
    print('list_overlap: {}'.format(list_intersect)) 

    list_c.append(len(list_intersect)) 

print(list_c)