2015-07-21 71 views
0

我有點新的Python,所以我想知道是否有完成某事的一種更有效的方式。基本上我需要根據一個隨機數(0或1)創建一個來自兩個其他數組之一的值的數組。目前使用for循環很容易實現,但我只是好奇,如果有更優雅的/蟒蛇上下的方式來做到這一點,似乎對於Python是如何設計的過於笨重:更有效的方式來創建數組

import random 

xySet = ['x', 'y'] 
xP = [10.1, 11.2, 12.3] 
yP = [12.5, 13.2, 14.1] 
nObser = 10 

x = [] 
p = [] 

randVals = [random.randint(0,1) for i in range(nObser)] 

print randVals 

for i in range(nObser): 
    x.append(xySet[randVals[i]]) 
    if randVals[i]: 
     p.append(xP[random.randint(0,2)]) 
    else: 
     p.append(yP[random.randint(0,2)]) 

print x 
print p 

這給了我正確的輸出我希望:

[1, 1, 1, 0, 1, 1, 1, 0, 1, 0] 
['y', 'y', 'y', 'x', 'y', 'y', 'y', 'x', 'y', 'x'] 
[12.3, 11.2, 10.1, 13.2, 10.1, 11.2, 12.3, 14.1, 10.1, 13.2] 

謝謝!

回答

3

你可以用一對單的內涵

>>> from random import choice 
>>> x = [choice(xySet) for _ in range(nObser)] 
>>> p = [choice(xP) if v == 'x' else choice(yP) for v in x] 
>>> x 
['y', 'y', 'y', 'x', 'x', 'x', 'y', 'x', 'x', 'x'] 
>>> p 
[14.1, 13.2, 14.1, 10.1, 10.1, 12.3, 13.2, 12.3, 11.2, 10.1] 

在第一個列表理解,你用random.choice隨機挑選'x''y'

然後在第二個列表理解中,從相應列表遍歷您的x列表和示例(再次使用random.choice)。

相關問題