2013-03-19 14 views
45

これまでのところ、ファイルをインポートし、新しいファイルを作成し、リストをランダム化する方法を理解しました。リストから50個のアイテムをランダムに選択してファイルに書き込む

ファイルからランダムに50個のアイテムしか選択できないという問題がありますか?

def randomizer(input,output1='random_1.txt',output2='random_2.txt',output3='random_3.txt',output4='random_total.txt'): 

#Input file 
    query=open(input,'r').read().split() 
    dir,file=os.path.split(input) 

    temp1 = os.path.join(dir,output1) 
    temp2 = os.path.join(dir,output2) 
    temp3 = os.path.join(dir,output3) 
    temp4 = os.path.join(dir,output4) 


    out_file4=open(temp4,'w') 

    random.shuffle(query) 

    for item in query: 
     out_file4.write(item+'\n') 

総ランダム化ファイルは

example: 

random_total = ['9','2','3','1','5','6','8','7','0','4'] 

だったのであれば、私は3つのファイルたい(out_file1を| 2 | 3)3の最初のランダムなセット、3の第2のランダムセット、および第三のランダムと3のセット(この例では、作成したいものは50でなければなりません)

random_1 = ['9','2','3'] 
random_2 = ['1','5','6'] 
random_3 = ['8','7','0'] 

したがって、最後の '4'は含まれません。

ランダム化したリストから50を選択するにはどうすればよいですか?

さらに、元のリストからランダムに50を選択するにはどうすればよいですか?

+0

どういう意味ですか? –

答えて

109

リストはランダムな順序である場合は、あなただけの

random.sample(the_list, 50) 

random.sampleヘルプテキストを使用、それ以外の場合は最初の50

を取ることができます:私はrandom.choice()があると思い

sample(self, population, k) method of random.Random instance 
    Chooses k unique random elements from a population sequence. 

    Returns a new list containing elements from the population while 
    leaving the original population unchanged. The resulting list is 
    in selection order so that all sub-slices will also be valid random 
    samples. This allows raffle winners (the sample) to be partitioned 
    into grand prize and second place winners (the subslices). 

    Members of the population need not be hashable or unique. If the 
    population contains repeats, then each occurrence is a possible 
    selection in the sample. 

    To choose a sample in a range of integers, use xrange as an argument. 
    This is especially fast and space efficient for sampling from a 
    large population: sample(xrange(10000000), 60) 
+0

完璧。説明をありがとうございます –

+3

ランダムをインポートする必要があることに注意してください。 'import random' – jxn

13

をより良い選択肢。

from numpy import random 

mylist = [13,23,14,52,6,23] 

random.choice(mylist,3) 

関数は、スライスをシャッフルするリストからランダムにアイテムを選択する

+5

' random.choice(mylist、3、replace = False) 'を使う必要があると思います。 –

+0

これはリスト項目を繰り返す可能性があります – Paullo

7

簡単な方法を3つのランダムに選択された値の配列を返します。

import random 
a = [1,2,3,4,5,6,7,8,9] 
random.shuffle(a) 
print a[:4] # prints 4 random variables 
+0

ここではあまり評価されていませんanswer imho –

+0

@MonicaHeddneckなぜランダムなシャッフリングが行われるのですか?(マシスト、3、置き換え= False)スライスするのがよろしいですか?選択範囲をランダム化して多数のサンプルを選択しないと、ランダムシャッフリングと同じメリットがあり、シャッフルサンプルのスライスを取ることになりますか?説明していただけますか?ありがとう。 – salvu

+2

私はこれを使って機械学習プロジェクト用のテスト/トレインセットを簡単に作成しました。 'random.choice(mylist、3) 'を使用すると、2つの互いに素なセットが作成されることはありません。 –

関連する問題