假设我有一个列表列表:
[[0,0,0,1,2,3],[0,0,0,4,5,6],[0,0,0,0,7,8],[0,0,0,0,0,9]]
我希望最终得到一个列表,该列表将从该列表中的每个列表中删除常见的空/零/关键字,以产生所需的输出:
[[1,2,3],[4,5,6],[0,7,8],[0,0,9]]
显然,循环遍历该列表中的每个列表,然后将其与所有其他列表进行比较,这超出了理想的答案。谢谢。
最佳答案
如果您对这些子列表进行排序,您会发现最大的子列表包含您需要从所有子列表中删除的零数量。所以只要找到max
:
x = [[0,0,0,1,2,3],[0,0,0,4,5,6],[0,0,0,0,7,8],[0,0,0,0,0,9]]
max(x)
Out[2]: [0, 0, 0, 4, 5, 6]
计算出需要删除多少个前导零:
from itertools import takewhile
#needlessly pedantic way of doing this
num_zeroes = len(list(takewhile(lambda p: p == 0, max(x))))
并相应地切片:
[li[num_zeroes:] for li in x]
Out[12]: [[1, 2, 3], [4, 5, 6], [0, 7, 8], [0, 0, 9]]
关于python - 按值从多个列表中删除出现的元素(缩短多个列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656550/