为了账号安全,请及时绑定邮箱和手机立即绑定

无法解压列表结构以进行嵌套列表理解

无法解压列表结构以进行嵌套列表理解

慕盖茨4494581 2021-03-10 13:52:10
创建简单的嵌套列表理解时遇到问题。每个解压缩级别都无法从列表结构中正确删除列表。详细信息如下。file_list = ['genes1.csv', 'genes2.csv']set_list = [('genes2.csv', (['A2LD1', 'A1BG', 'A2ML1', 'A1CF', 'A2M', 'A2BP1'], [-0.95, 1.226, 3.473, 4.958, 6.645, 11.953])), ('genes1.csv', (['A2LD1', 'A1BG', 'A2ML1', 'A1CF', 'A2M', 'A2BP1'], [-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]))]set_list.sort(key = lambda (x,y): file_list.index(x))让我们看一下排序后的set_list:print '\nset_list sorted:', set_listset_list sorted: [('genes1.csv', (['A2LD1', 'A1BG', 'A2ML1', 'A1CF', 'A2M', 'A2BP1'], [-0.529, 1.444, 3.133, 4.303, 6.387, 11.117])), ('genes2.csv', (['A2LD1', 'A1BG', 'A2ML1', 'A1CF', 'A2M', 'A2BP1'], [-0.95, 1.226, 3.473, 4.958, 6.645, 11.953]))]现在,我们将仅提取样本1的值,在这种情况下,来自genes1.csv的值:sample_1_values = []for i, (j, k) in set_list[:1]:    for v in k:        sample_1_values.append(v)print '\nsample 1 values:', sample_1_values并输出:sample 1 values: [-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]现在的目标是创建sample_1_values作为嵌套列表推导:sample_1_values = [[v for v in k] for i, (j, k) in set_list[:1]]print '\nsample_1_values from list comprehension:', sample_1_values并输出:[[-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]]首先,让我们分解一下嵌套结构:s_list_comp_1 = [k for i, (j, k) in set_list[:1]]print '\ninner list comprehension:', s_list_comp_1print type(s_list_comp_1)输出:inner list comprehension: [[-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]]<type 'list'>没有开箱。现在进行外部嵌套:s_list_comp_2 = [v for v in s_list_comp_1]print '\nouter list comprehension', s_list_comp_2print type(s_list_comp_2)输出:[[-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]]<type 'list'>同样的问题,这次没有打开列表。使用for语句和追加,我们可以看到它正常工作:s_list_comp_2 = []for v in s_list_comp_1:    for l in v:        s_list_comp_2.append(l)print '\ncorrect unpacking:', s_list_comp_2输出:correct unpacking: [-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]正确的拆包需要另一层次的层次结构,我无法使用嵌套列表理解来复制层次结构。创建sample_1_values的整个表达式必须是嵌套列表推导式,以便稍后在不使用此占位符的情况下插入。有什么建议吗?
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

如果我理解正确,那么您需要这样做:

[v for i, (j, k) in set_list[:1] for v in k]

在您的“内部列表理解”示例中,没有拆包发生,因为列表理解只是k从中的每个项目产生值set_list,而该项目是一个列表。

在您的原始示例中:

[[v for v in k] for i, (j, k) in set_list[:1]]

这些项目由来解包v for v in k,但是您可以通过从中创建一个新列表来重新打包它们(具有嵌套列表理解功能)。

您需要的不是嵌套列表理解,而只是带有多个for子句的单个列表理解。


查看完整回答
反对 回复 2021-03-27
  • 1 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号