首页 > 解决方案 > 如何从年龄列表创建嵌套列表?

问题描述

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

数据包括年龄列。

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

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

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

如果我有如下列表来概括问题:

年龄 = [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.2,1.2,1.2...]]

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

我在想列表理解可能是要走的路?我遇到过它们,但真的不知道如何使用它们。

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

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

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

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

谢谢

标签: python

解决方案


我想生成这样的结果:

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 行的意思是:

  • 根据列表的内容对列表进行分组,
  • Counter 结果的item 看起来像一个dict,key 是age,value 是每个age 的频率。

第 4 行的意思是:

  1. 迭代Counter结果的item,得到keys(k)和values(v)
  2. 通过 [k]*v 创建相同值的列表

推荐阅读