如何根据年龄列表创建嵌套列表?

时间:2019-11-16 13:09:35

标签: python

我正在从在线模型中下载csv格式的数据表。

数据包括年龄列。

当列中的所有数据都为一个年龄时,我的程序可以正常工作,但是现在我正在下载年龄范围较大的数据,这样我可能在10亿年时拥有400行数据,然后在350处拥有350行数据。 11亿年等。

csv文件中大约有30,000行40列。

我想我会创建一个由年龄控制的嵌套列表,然后遍历每个子列表。

我按如下方式提取数据

log_age = data_upload[:,2]
mass = data_upload[:,5]
log_L = data_upload[:,6]
log_Teff = data_upload[:,7]
log_g = data_upload[:,8]
mbolmag = data_upload[:,24]
Umag = data_upload[:,25]
Bmag = data_upload[:,26]

如何从这些单独的列表中创建嵌套列表?

如果我有如下列表,则可以概括该问题:

age = [1,1,1,1,1,1,1,1,1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.2,1.2,1.2 ...]

如何将其转换为以下格式:

[[1,1,1,1,1,1,1,1,1,1],[1.1,1.1,1.1,1.1,1.1,1.1,1.1],[1.2,1.2,1.2 ...] ]

我需要使用年龄列表的结构对所有列表执行此操作。

我认为列表理解可能是一种方法?我遇到过它们,但真的不知道如何使用它们。

有一个名为np.unique的命令,它将在我的原始列表中列出唯一编号,因此我可以通过以下方式开始:

unique_age = np.unique(age)
nested_age = [[] for _ in range(len(unique_age))]

然后我可以对要创建的所有嵌套列表重复此操作,但是然后我必须遍历每个列表并将它们转换为嵌套列表。

有人可以告诉我该怎么做吗?

谢谢

1 个答案:

答案 0 :(得分:1)

我想生成如下结果:

from collections import Counter
age = [1,1,1,1,1,1,1,1,1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.2,1.2,1.2]
c = Counter(age)
result = [[k]*v for k,v in c.items()]
print(result)
# Result would be: 
# [[1, 1, 1, 1, 1, 1, 1, 1, 1], [1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1], [1.2, 1.2, 1.2]]

第3行表示:

  • 根据列表的内容对列表进行分组,
  • 计数器结果项看起来像字典,键是年龄,而值是每个年龄的频率。

第4行表示:

  1. 迭代Counter结果的项目,获取键(k)和值(v)
  2. 通过[k] * v创建相同值的列表