创建数组的更有效方法
More Efficient Way to Create array
我对 python 有点陌生,所以我想知道是否有更有效的方法来完成某些事情。基本上我需要根据随机数(0 或 1)创建一个来自其他两个数组之一的值数组目前使用 for 循环很容易实现,但是我只是好奇是否有更多 elegant/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]
在第一个列表理解中,您使用 random.choice
随机选择 'x'
或 'y'
。
然后在第二个列表理解中,您迭代 x
列表并从适当的列表中采样(再次使用 random.choice
)。
我对 python 有点陌生,所以我想知道是否有更有效的方法来完成某些事情。基本上我需要根据随机数(0 或 1)创建一个来自其他两个数组之一的值数组目前使用 for 循环很容易实现,但是我只是好奇是否有更多 elegant/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]
在第一个列表理解中,您使用 random.choice
随机选择 'x'
或 'y'
。
然后在第二个列表理解中,您迭代 x
列表并从适当的列表中采样(再次使用 random.choice
)。