Python,根据应用于相同长度

时间:2016-09-29 12:10:24

标签: python list numpy

好的,我确信有一种非常简单的方法可以做到这一点,但我在python中生锈了,我无法用pythonic的方式来做到这一点。

我有一个列表,代表当天的小时数:

import numpy as np
hourOfDay = np.mod(range(0, 100), 24)

然后我想创建一个新值列表0.4,当小时介于722之间,而0.2则为{/ 1}。

有几个相关的帖子herehere,但它们并不是我想要的(它们最终会有一个较短的列表,我想要相同长度的列表)。

假设我需要使用列表理解,我试过这个:

newList = [0.4 for hour in hourOfDay if hour <= 7 or hour >= 22 else 0.2]

3 个答案:

答案 0 :(得分:1)

你的列表理解略有偏差。此外,如果您希望0.4小时在722之间,则需要7<= hour <= 22

import numpy as np
hourOfDay = np.mod(range(0, 100), 24)

newList = [0.4 if 7 <= i <= 22 else 0.2 for i in hourOfDay]

>>> newList
[0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2]

答案 1 :(得分:1)

您可以使用掩码,但请注意,为了拒绝类型转换,您应该创建第一个数据类型为float的数组。

In [15]: hourOfDay = np.mod(range(0, 100), 24, dtype=np.float)

In [16]: mask = np.logical_or(hourOfDay <= 7, hourOfDay >= 22)

In [17]: hourOfDay[mask] = 0.4

In [19]: hourOfDay[~mask] = 0.2

In [20]: hourOfDay
Out[20]: 
array([ 0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.2,  0.2,  0.2,
        0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,
        0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.2,
        0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,
        0.2,  0.2,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,
        0.4,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,
        0.2,  0.2,  0.2,  0.2,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,  0.4,
        0.4,  0.4,  0.4,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.2,
        0.2,  0.2,  0.2,  0.2,  0.2,  0.2,  0.4,  0.4,  0.4,  0.4,  0.4,
        0.4])

答案 2 :(得分:1)

另一种方法是将map()用作:

map(lambda x: 0.4 if 7 <= x <= 22 else 0.2, hourOfDay)