あなたは4・オブ・各ソースからのあなたのリストの要素ののランダム順序付きリストを取得するためのより効率的な方法を探しているなら、random.shuffle(list)
を試してみてください。
>>> import random
>>> random.seed()
>>> sources = ['Prone', 'Supine', 'Halfway', 'HalfInv']
>>> copy1 = sources * 4
>>> copy2 = sources * 4
>>> copy1 == copy2
True
>>> random.shuffle(copy1)
>>> random.shuffle(copy2)
>>> copy1 == copy2
False
>>> copy1
['HalfInv', 'Prone', 'Halfway', 'Supine', 'Prone', 'Halfway', 'Prone', 'Supine', 'Prone', 'HalfInv', 'HalfInv', 'Halfway', 'Supine', 'Halfway', 'HalfInv', 'Supine']
>>> copy2
['Prone', 'Halfway', 'Prone', 'Prone', 'HalfInv', 'Halfway', 'Halfway', 'HalfInv', 'Supine', 'HalfInv', 'Halfway', 'Supine', 'Prone', 'Supine', 'HalfInv', 'Supine']
次は、生成したいとループカウンタに基づいてリストに名前を付けてください...私はこれに対してお勧めしたいと思います。代わりにランダムリストを1つずつリストに追加するだけで、追加された順序でインデックスに登録することができます。
>>> n = 2 # number of random lists you want
>>> rand_lists = [] # A list for holding your randomly generated lists
>>> for i in range(n):
sources_copy = sources * 4
random.shuffle(sources_copy)
rand_lists.append(sources_copy)
ただし、データが2つの別々のリストにあるという問題が残ります。これを解決するには、zip()
機能が必要です。これは、リスト1の各要素をリスト2の対応する索引要素と結合し、各索引にタプルを形成します。これは、任意の数のシーケンスで行うことができます。
>>> list1 = [1,2,3,4,5]
>>> list2 = ['a','b','c','d','e']
>>> zip(list1, list2)
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]
あなたのメタリストの名前の前に*
星開梱演算子を使用し、一緒にあなたのリスト-内-リストを圧縮します。
>>> my_data = zip(*rand_lists)
これでcsvファイルに出力します。独自のcsv関数を書くだけで十分です。列の区切り記号はコンマで、行の区切り記号は改行記号です。ここから
def out_csv(mydata, filename):
with open(filename, 'w') as out_handle:
for line in mydata:
out_handle.write(','.join(line) + '\n')
だけout_csv機能にあなたのzip形式のリストのコンボを渡し、そしてあなたのファイル名が.csv
拡張子を持っていることを確認してください。 Excelはネイティブで.csv
のファイルを読み取ることができるので、コピー&ペーストをする必要はありません。
ここで最後のステップです:このような何かが動作するはず
>>> out_csv(my_data, 'my_name.csv')
@ user747465:これはもっと論理的な順序にする必要があります。乾杯! –
random.shuffleは自分自身を試した最初のものですが、制約を強制する必要があるために動作しません2つの同じ要素が連続していないこと。 –
良い、私は強制するために必要な制約のため、私は元のバージョンに適応し、それは完全に働いた。 –