我有以下列表:
a = [[0, 1, 0, 1, 1, 1], [23,22, 12, 45, 32, 33],[232, 332, 222, 342, 321, 232]]
我想删除a[0]
中的0
以及a[1]
和[2]
的对应值,因此结果列表应该如下所示:
d = [[1, 1, 1, 1], [22, 45, 32, 33], [332, 342, 321, 232]]
我有以下列表:
a = [[0, 1, 0, 1, 1, 1], [23,22, 12, 45, 32, 33],[232, 332, 222, 342, 321, 232]]
我想删除a[0]
中的0
以及a[1]
和[2]
的对应值,因此结果列表应该如下所示:
d = [[1, 1, 1, 1], [22, 45, 32, 33], [332, 342, 321, 232]]
3条答案
按热度按时间vs91vp4v1#
我喜欢
itertools.compress
的答案,然而,Python中的整数嵌套列表几乎总是更好地存储在numpy数组中,numpy数组提供了丰富的方法来选择行/列,例如:Numpy在可能的情况下使用视图而不是副本,因此它通常也更节省内存。
回到Python列表很容易:
uurv41yg2#
itertools.compress
是为这个任务而 * 构建 * 的,将它与listcomp配对来操作每个子列表,并强制它急切地生成每个新的子列表,这样就可以用相当简单的代码得到想要的结果:其输出:
在线试用!
每个调用使用
a[0]
作为选择器来确定要从数据中保留哪些元素(每个新的子-list
);当a[0]
中的选择器值为false(此处为0
)时,将丢弃相应的元素,当为true(此处为1
)时,将保留该元素。bgibtngc3#
你可能需要一个类似这样的函数(目前还没有测试):
列表列表中的第一个列表是控制列表,这有点奇怪,但本质上,您希望遍历其他列表,并检查在列表中的该点,控制列表是否(
keep_list
)具有一个0
,如果是的话就删除那个元素。我把它放在一个内部函数里因为这样更容易理解-你可以写一个嵌套的列表解析或者嵌套的for循环来达到同样的结果。