2016-05-18 40 views
0

私は、次のような行が表示されているところで、csvファイルを出力します: x、y、0,1またはx、y、1,0 xとyは1からのランダムな整数です重み付けされた確率で5になる。残念ながら、私はちょうどこのCSVファイルとして取得:乱数をcsvファイルに書き込む

4,4,0,1 
0,1 
0,1 
3,4,1,0 
1,0 
0,1 
1,0 
0,1 
1,0 
0,1 

私のPythonのコードは次のようになります。

import csv 
import random 
import numpy 

l = [[[10,20,50,10,10],[20,20,20,20,20]],[[10,20,50,10,10],[20,20,20,20,20]]] 

with open("test.csv", "wb") as f: 
    writer = csv.writer(f) 
    for i in range(10): 
     x = random.randint(0,1) 
     h = l[x] 
     d =[] 
     while len(h) > 0: 
      a=numpy.array(h.pop(0)) 
      d.append(numpy.random.choice(range(1, 6), p=a/100.0)) 
     c = [0] * 2 
     c[x]=1 
     writer.writerow(d+c) 

は私が間違って何をしますか?

答えて

2

lのリストの項目をポップします。空になると、while len(h) > 0:はTrueにならず、whileループは実行されません。サブリストをコピーしてみ代わりに

import csv 
import random 
import numpy 

l = [[[10,20,50,10,10],[20,20,20,20,20]],[[10,20,50,10,10],[20,20,20,20,20]]] 

with open("test.csv", "wb") as f: 
    writer = csv.writer(f) 
    for i in range(10): 
     x = random.randint(0,1) 
     h = l[x][:]    # <-- copy list 
     d =[] 
     while len(h) > 0: 
      a=numpy.array(h.pop(0)) 
      d.append(numpy.random.choice(range(1, 6), p=a/100.0)) 
     c = [0] * 2 
     c[x]=1 
     writer.writerow(d+c) 

、または直接

import csv 
import random 
import numpy 

l = [[[10,20,50,10,10],[20,20,20,20,20]],[[10,20,50,10,10],[20,20,20,20,20]]] 

with open("test.csv", "wb") as f: 
    writer = csv.writer(f) 
    for i in range(10): 
     x = random.randint(0,1) 
     d =[] 
     for h in l[x]:    # <-- enumerate list 
      a=numpy.array(h) 
      d.append(numpy.random.choice(range(1, 6), p=a/100.0)) 
     c = [0] * 2 
     c[x]=1 
     writer.writerow(d+c) 
をサブリストを列挙
関連する問題