Flatten list of lists
本问题已经有最佳答案,请猛点这里访问。
我对Python中的方括号有问题。我编写了一个代码,生成以下输出:
1 | [[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]] |
但是我想用它来做一些计算,但是方括号不允许。
我怎样才能卸下支架?我看到了一些这样做的例子,但我不能将它们应用于这个案例。
使用嵌套的列表理解将列表变平以"删除括号"。这将取消嵌套存储在列表中的每个列表!
1 2 | list_of_lists = [[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]] flattened = [val for sublist in list_of_lists for val in sublist] |
嵌套列表理解的计算方式与解包的方式相同(即为每个新循环添加换行符和制表符)。所以在这种情况下:
1 | flattened = [val for sublist in list_of_lists for val in sublist] |
相当于:
1 2 3 4 | flattened = [] for sublist in list_of_lists: for val in sublist: flattened.append(val) |
最大的区别是,list comp的计算速度比未保存的循环快得多,并且消除了追加调用!
如果一个子列表中有多个项目,那么列表comp甚至会将其扁平化。工业工程
1 2 3 4 | >>> list_of_lists = [[180.0, 1, 2, 3], [173.8], [164.2], [156.5], [147.2], [138.2]] >>> flattened = [val for sublist in list_of_lists for val in sublist] >>> flattened [180.0, 1, 2, 3, 173.8, 164.2, 156.5, 147.2,138.2] |
我将使用
1 2 | from itertools import chain list(chain.from_iterable([[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]])) |
鉴于
1 | d = [[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]] |
你具体的问题是:我怎样才能去掉括号?
使用列表理解:
1 | new_d = [i[0] for i in d] |
会给你这个
1 | [180.0, 173.8, 164.2, 156.5, 147.2, 138.2] |
然后,您可以使用适当的索引访问各个项目,例如,
如果要收集数据,可以使用括号或括号。
注意,此解决方案专门针对您的问题/问题,它不提供通用的解决方案。也就是说,它对你的案件有效。
1 2 3 | >>> lis=[[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]] >>> [x[0] for x in lis] [180.0, 173.8, 164.2, 156.5, 147.2, 138.2] |