Python 创建阵列的更有效方法

Python 创建阵列的更有效方法,python,arrays,processing-efficiency,Python,Arrays,Processing Efficiency,我对python有点陌生,所以我想知道是否有更有效的方法来完成一些事情。基本上,我需要根据随机数(0或1)从其他两个数组中的一个创建一个值数组。目前,使用for循环很容易实现,但是我只是好奇是否有一种更优雅的/python-ish方法来实现这一点,它对于python的设计似乎太笨拙了: import random xySet = ['x', 'y'] xP = [10.1, 11.2, 12.3] yP = [12.5, 13.2, 14.1] nObser = 10 x = [] p =

我对python有点陌生,所以我想知道是否有更有效的方法来完成一些事情。基本上,我需要根据随机数(0或1)从其他两个数组中的一个创建一个值数组。目前,使用for循环很容易实现,但是我只是好奇是否有一种更优雅的/python-ish方法来实现这一点,它对于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]

谢谢

您可以使用一对列表理解

>>> 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]
在第一个列表理解中,您可以使用随机选择
'x'
'y'


然后在第二个列表理解中,您迭代您的
x
列表,并从相应的列表中选择样本(再次使用
random.choice
)。

您可以使用一对列表理解

>>> 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]
在第一个列表理解中,您可以使用随机选择
'x'
'y'


然后在第二个列表理解中,您迭代您的
x
列表,并从相应的列表中选择样本(再次使用
random.choice
)。

您可以使用一对列表理解

>>> 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]
在第一个列表理解中,您可以使用随机选择
'x'
'y'


然后在第二个列表理解中,您迭代您的
x
列表,并从相应的列表中选择样本(再次使用
random.choice
)。

您可以使用一对列表理解

>>> 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]
在第一个列表理解中,您可以使用随机选择
'x'
'y'

然后在第二个列表理解中,您迭代您的
x
列表,并从相应的列表中采样(再次使用
random.choice