【问题标题】:More Efficient Way to Create array更有效的创建数组的方法
【发布时间】:2015-07-21 13:40:29
【问题描述】:

我对 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]

谢谢!

【问题讨论】:

    标签: python arrays processing-efficiency


    【解决方案1】:

    你可以使用一对列表推导

    >>> 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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      相关资源
      最近更新 更多