Python Can';t解包列表结构以进行嵌套列表理解

Python Can';t解包列表结构以进行嵌套列表理解,python,Python,创建简单嵌套列表时遇到问题。每一级解包都不能正确地从列表结构中删除列表。详情如下 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

创建简单嵌套列表时遇到问题。每一级解包都不能正确地从列表结构中删除列表。详情如下

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))
让我们看一下已排序的集合列表:

print '\nset_list sorted:', set_list

set_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]
[[-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]]
现在,目标是创建示例_1_值作为嵌套列表:

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
以及输出:

sample 1 values: [-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]
[[-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_1
print type(s_list_comp_1)
输出:

inner list comprehension: [[-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]]
<type 'list'>
[[-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]]
<type 'list'>
correct unpacking: [-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]
输出:

inner list comprehension: [[-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]]
<type 'list'>
[[-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]]
<type 'list'>
correct unpacking: [-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]
输出:

inner list comprehension: [[-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]]
<type 'list'>
[[-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]]
<type 'list'>
correct unpacking: [-0.529, 1.444, 3.133, 4.303, 6.387, 11.117]

正确的解包需要另一个层次结构,我无法使用嵌套列表复制它。创建示例_1_值的整个表达式必须是嵌套的列表,以便在以后插入,而无需此占位符。建议?

如果我理解正确,您希望:

[v for i, (j, k) in set_list[:1] for v in k]
在“内部列表理解”示例中,不会进行解包,因为列表理解只是从
set\u list
中的每个项目中生成
k
值,并且该项目是一个列表

在您最初的示例中:

[[v for v in k] for i, (j, k) in set_list[:1]]
这些项目通过
v for v in k
解包,但您可以通过制作一个新列表(带有嵌套列表)来重新打包它们


您需要的不是嵌套的列表理解,而是一个包含多个
for
子句的单个列表理解。

是的,完全正确,它使用for循环和append提供与上述示例值相同的所需输出。我不知道你可以这样构造它。谢谢