三重列表理解(列表列表数组列表中的平面列表)
Triple list comprehension (flat list out of a list of arrays of lists of lists)
我一直在 Google 寻找这个问题的答案,到目前为止只看到不同问题的相似结果。
我的list of lists的结构如下(编辑:数组是numpy的):
[array([[item]]), array([[item2]]), ...]
如您所见,这并不是格式不一致(这是在之前的操作中使用了 numpy 列向量的结果)。我想使用 1 行列表理解将其扁平化为一个简单的值列表。类似的问题包括可变大小的子列表或子列表,我不必担心。
对我来说最有意义的“解决方案”:
[item for sublist for arr in list for item in sublist in arr]
但由于语法原因,这不起作用,更不用说我不确定它是否足够深入。
我想知道这是否可能,是否有比我聪明的人能提出解决方案。对时间不敏感,我们已经满足于散点图......现在。
干杯!
如果你的数组像你展示的那样只有一个元素,你可以在理解时直接向下索引:
list_of_lists_of_lists = [[[item1]], [[item2]], ...]
[array[0][0] for array in list_of_lists_of_lists]
如果你的数组比较复杂,你可以嵌套 for x in y 语句,你只需要按正确的顺序排列它们:
list_of_lists_of_lists = [[[item1]], [[item2], [item5]], [[item3, item4]]]
[item for lists_of_lists in list_of_lists_of_lists for sublist in lists_of_lists for item in sublist]
这将按顺序产生它们:
[item1, item2, item5, item3, item4]
最后,如果您不知道它有多深但您确实知道您的项目的类型,您可以随时执行递归搜索:
test = [[[1]], [[2], [5]], [[[3], 4]], [[[[[[6]]]]]]]
result = list()
my_type = int
def generator(my_list, accumulator):
if isinstance(my_list, my_type):
accumulator.append(my_list)
return
for item in my_list:
generator(item, accumulator)
gen(test, result)
这会给你结果 = [1, 2, 5, 3, 4, 6]
我一直在 Google 寻找这个问题的答案,到目前为止只看到不同问题的相似结果。
我的list of lists的结构如下(编辑:数组是numpy的):
[array([[item]]), array([[item2]]), ...]
如您所见,这并不是格式不一致(这是在之前的操作中使用了 numpy 列向量的结果)。我想使用 1 行列表理解将其扁平化为一个简单的值列表。类似的问题包括可变大小的子列表或子列表,我不必担心。
对我来说最有意义的“解决方案”:
[item for sublist for arr in list for item in sublist in arr]
但由于语法原因,这不起作用,更不用说我不确定它是否足够深入。
我想知道这是否可能,是否有比我聪明的人能提出解决方案。对时间不敏感,我们已经满足于散点图......现在。
干杯!
如果你的数组像你展示的那样只有一个元素,你可以在理解时直接向下索引:
list_of_lists_of_lists = [[[item1]], [[item2]], ...]
[array[0][0] for array in list_of_lists_of_lists]
如果你的数组比较复杂,你可以嵌套 for x in y 语句,你只需要按正确的顺序排列它们:
list_of_lists_of_lists = [[[item1]], [[item2], [item5]], [[item3, item4]]]
[item for lists_of_lists in list_of_lists_of_lists for sublist in lists_of_lists for item in sublist]
这将按顺序产生它们:
[item1, item2, item5, item3, item4]
最后,如果您不知道它有多深但您确实知道您的项目的类型,您可以随时执行递归搜索:
test = [[[1]], [[2], [5]], [[[3], 4]], [[[[[[6]]]]]]]
result = list()
my_type = int
def generator(my_list, accumulator):
if isinstance(my_list, my_type):
accumulator.append(my_list)
return
for item in my_list:
generator(item, accumulator)
gen(test, result)
这会给你结果 = [1, 2, 5, 3, 4, 6]