2016-06-22 23 views
0

リストから値をランダムに選択し、この値をこのリストから削除して再度選択することができない場合は、この値の描画は、値がなくなるまで続きます。リストから値を無作為に選択して選択した値を削除する方法が速い

私がやったやり方は、問題をほの暗いですが、それにはおよそ8秒かかります。だから私は、より速い方法があるかどうか疑問に思っています。私はJupiterのノートブックをAnacondaソフトウェアで使用しています。これはサーバーを経由するため、問題になる可能性がありますか?

これは私がやったことです:

TotalNumbcol = 266 


Column_Numbers = list(np.arange(1,TotalNumbcol+1,1)) # creating a list with all column numbers in it from which can be drawn. 
#print Column_Numbers 
ABC = Column_Numbers # Creating a variable for the len command in the for loop below, since the Column Numbers length will change. 
Chosen_Columns = [[0] for i in range(0,len(Column_Numbers))] 

for i in range(len(ABC)): 
    RandChoiceCol = int(random.choice(Column_Numbers)) # chosing a random number from the Column_Numbers range 
    Chosen_Columns[i]=(RandChoiceCol) # adding each randomly chosen column number to a list in list showing which column has been chosen. 
    Column_Numbers = [x for x in Column_Numbers if x not in Chosen_Columns] # delete chosen_column from RandChoiceCol 

print Chosen_Columns 

print Column_Numbers 


[21, 131, 145, 218, 153, 60, 201, 15, 158, 189, 230, 210, 18, 103, 69, 76, 226, 180, 67, 187, 238, 20, 157, 24, 48, 11, 47, 117, 101, 51, 122, 155, 109, 225, 86, 243, 146, 30, 58, 7, 66, 132, 22, 110, 1, 142, 234, 245, 266, 129, 232, 39, 184, 49, 114, 182, 162, 144, 92, 126, 5, 254, 150, 102, 135, 173, 36, 52, 42, 26, 228, 63, 17, 8, 163, 40, 78, 174, 222, 205, 183, 140, 221, 70, 125, 72, 247, 237, 64, 246, 185, 130, 248, 90, 197, 53, 107, 77, 108, 256, 207, 139, 176, 192, 2, 164, 4, 124, 241, 113, 188, 178, 235, 265, 190, 212, 99, 175, 79, 231, 257, 202, 50, 242, 181, 46, 161, 133, 104, 28, 251, 213, 204, 59, 149, 252, 179, 43, 137, 195, 160, 220, 119, 74, 87, 255, 98, 208, 105, 239, 170, 203, 167, 136, 250, 134, 32, 165, 229, 9, 258, 13, 141, 240, 262, 34, 227, 148, 41, 111, 54, 71, 61, 94, 249, 29, 75, 10, 193, 152, 73, 123, 65, 6, 116, 68, 91, 56, 25, 233, 156, 261, 35, 171, 211, 215, 186, 154, 138, 200, 44, 112, 57, 166, 120, 147, 89, 31, 106, 118, 199, 198, 81, 223, 83, 12, 214, 45, 121, 244, 95, 168, 55, 37, 206, 263, 93, 196, 115, 169, 217, 236, 82, 143, 96, 33, 209, 14, 100, 216, 128, 259, 219, 151, 16, 177, 159, 23, 38, 84, 80, 27, 19, 264, 62, 85, 127, 97, 224, 172, 191, 88, 253, 3, 260, 194] 
[] 

私に知らせてください、時間を節約し、より効率的な方法がある場合。あなただけのたびに、新しいリスト、新しい番号を作成するのではなく、場所にリストをシャッフルすること

答えて

0

よろしく、:

Column_Numbers = list(np.arange(1,TotalNumbcol+1,1)) 

random.shuffle(Column_Numbers) 

while Column_Numbers: 
    rand = Column_Numbers.pop() 
    print(rand) 
+0

おかげで、それは大きな違いになります! – AlmostGr

関連する問題