获得已过滤子列表项的线性索引

时间:2017-07-27 07:24:43

标签: python list filter list-comprehension

相当具体的问题很难谷歌/搜索。假设我有一个列表列表:

lists = [[30,34,0,0],[455,0,0],[0,509,0,0,0,0,444]]

如何使用以下顺序操作返回列表列表:

  • 删除零条目
  • 线性索引剩余条目

预期产出:

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

第一部分很容易通过列表理解获得:

lists_no_zeros =  [[value for value in row if value != 0] for row in lists]

列表推导,zip,枚举的某些组合应该可以解决问题..

1 个答案:

答案 0 :(得分:4)

你到了一半。您可以使用itertools.count()获取索引:

>>> from itertools import count
>>> c = count()
>>> lists = [[30,34,0,0],[455,0,0],[0,509,0,0,0,0,444]]
>>> [[next(c) for value in sublist if value] for sublist in lists]
[[0, 1], [2], [3, 4]]