提问人:Imane Kwik 提问时间:12/14/2022 最后编辑:Imane Kwik 更新时间:12/16/2022 访问量:147
For 循环将字符串列表附加到嵌套列表中的列表
For loop to append list of strings to lists within nested list
问:
[在此处输入图像描述][1]我有一个数据集,它是 3 个嵌套列表(称为“患者”)的列表。每个嵌套列表都包含一定数量的观测值。第一个嵌套列表包含 119 个观测值,第二个列表包含 9 个观测值,第三个列表包含 6 个观测值。这些观测值是包含一些键(如“开始时间”和“结束时间”)的字典。
现在我想创建一个 for 循环来创建一个包含 3 个嵌套列表的新列表。我希望每个新的嵌套列表只包含该特定患者的开始时间。因此,1 个列表包含 3 个不同大小的列表(119、9 和 6)
但是,当我尝试这样做时,我得到一个包含 3 个嵌套列表的列表,这些列表都具有相同的大小,所有嵌套列表都包括所有 134 个观测值(119+9+6,称为“start_times”)。有人可以帮我解决这个问题吗?
`
start_times = [[] for i in range(3)]
for a in patients:
for b in a:
for c in range(3):
start_times[c].append(b['start'])
' [1]:https://i.stack.imgur.com/0us5J.png [2]:https://i.stack.imgur.com/yHEIl.png
答:
0赞
Jasmijn
12/15/2022
#1
为此,您需要使用嵌套列表推导式。为了清楚起见,我更改了变量名称,并添加了空格以使结构清晰:
start_times = [
[
observation['start']
for observation
in patient
]
for patient
in patients
]
评论
0赞
Imane Kwik
12/15/2022
Jasmijn的回答对我有用。但是,我想对字典中的键“timeserieslabel”执行完全相同的操作。这个键不是像键“start”和“end”那样的字符串,而是另一个列表。例如,列表 ['其他工件']。当我点击它时,我得到一个名为“其他人工制品”的字符串。因此,我想要一个名为“labels”的列表,其中包含 3 个嵌套列表。我希望这些嵌套列表包含字符串,就像“start_time”向量一样。当我使用 Jasmijn 的方法时,嵌套列表包含新列表而不是字符串。这需要额外的步骤
0赞
Jasmijn
12/15/2022
我建议为此写一个新问题
0赞
Upender Kalwa
12/15/2022
#2
您可能希望改为执行此操作:
start_times = [[] for i in range(3)]
for idx, sublist in enumerate(patients):
for record in sublist:
start_times[idx].append(record["start"])
评论
0赞
Jasmijn
12/15/2022
[] * 3 == []
因此,这不能按预期工作。[[] * 3] == [[]]
评论