【发布时间】:2017-11-26 22:09:54
【问题描述】:
我有一个数组,它是一个时间列表(它是 10 年的天数),我想删除这个列表的某个选择,然后根据剩余的天数执行计算。这是为了天体物理模拟,我正在尝试选择某些“观察”另一个数据集的模式。
我的数组是:
t = [0,1,2,3,...,3650]
出于我的目的,我想保留每年的前 180 天,并删除其余的天,留下如下内容:
t_new = [1,2,...,178,179,365,366,...]
我通过以下方式实现了这一目标:
a = 180
b = 365 - a
t_new = [x for i, x in enumerate(t) if i%(a+b) < a]
将 a 和 b 作为变量让我能够保持每年不同数量的数据。
现在我想做的是保留每 30 个剩余数据中的前 10 个。这将模拟只能在每个月的前 10 天和每年的前 6 个月进行观察。
我试过了:
c = 10
d = 30-c
t_new2 = [x for i, x in enumerate(t_new) if i%(c+d) < c]
这应该会导致:
t_new2 = [0,1,2,3,4,5,6,7,8,9,30,31,...,178,179,365,366,...]
所以这是我们删除每 30 天中的最后 20 天(每月)和 365 天中的最后 185 天(每年)之后的剩余天数。
但我得到了错误:
ValueError: too many values to unpack
有没有更好的方法来做这个逻辑,也许将它组合成一行?
谢谢!
后续问题:
目前的解决方案是,
t_new = [365*year+day for year in range(10) for day in range(180) if day%30 < 10]
根据每个索引的值编辑原始数组。我想在第二个数组中只保留完全相同的索引,其值实际上是随机的,有没有办法将上述内容转换为索引操作?
【问题讨论】:
-
闰年呢?
-
是的,我暂时忽略这些 :) 一年中只有简单的 365 天
-
您列表中的拼写错误:
for i, in ... -
@MosesKoledoye 谢谢,现已修复
-
你拥有的是
lists,而不是arrays。后者也存在,它们不是列表。
标签: python arrays list list-comprehension