2015-07-21 38 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)。

相关问题