Python:for循环内的一行扩展

时间:2019-03-07 14:34:46

标签: python list for-loop

代码:

print([some_data[name]['indices'] for name in some_data.keys()])

输出:

[[[0, 0], [1, 0], [2, 0], [2, 1]], [[3, 0], [3, 1], [1, 1], [0, 1]], ...]

所需的输出

[[0, 0], [1, 0], [2, 0], [2, 1], [3, 0], [3, 1], [1, 1], [0, 1], ...]

尝试此方法告诉我'list'对象没有属性'result':One liner for extend loop python

是否可以对我的代码进行更改以获得单行解决方案?

预先感谢

4 个答案:

答案 0 :(得分:0)

  topList = [[1,2],[3,4]]
  flatList = [item for subList in topList for item in subList]

请参阅How to make a flat list out of list of lists?

答案 1 :(得分:0)

您正正确地将tge列表作为单个列表。 print()添加了额外的[]。打印为对象添加对象类型。

答案 2 :(得分:0)

对于那些刚刚使用itertools.chain删除了答案的人-该方法奏效了,我将接受您的答案。最终代码:

list(itertools.chain(*[some_data[name]['indices'] for name in some_data.keys()]))

编辑:决定不使用@Rocky Li的答案中的itertools

[e for name in some_data.keys() for e in some_data[name]['indices']]

答案 3 :(得分:0)

这是您需要的吗?例如。给出:

some_data = {'a': {'indices': [[0, 0], [1, 1]]}, 'b': {'indices': [[2, 2], [3, 3]]}}

您想要子列表,对吗?因此,我们可以这样做:

[j for i in some_data for j in some_data[i]['indices']]

返回:

[[0, 0], [1, 1], [2, 2], [3, 3]]