我这里有一个大的嵌套列表,它被简化了,因为实际的列表有几十个列表:
bigNestedList = [["d", "c", "a", "b", "e"],[4,"",8,9,""],.....]
为简单起见,我将它们分成两个单独的列表:
list1 = ["d", "c", "a", "b", "e"]
list2 = [4,"",8,9,""]
我想根据 list2 对 list1 进行升序排序。然而问题出现在 list2 中的空格。
我试图删除 list2 中的空白并对它们进行排序:
list2_tmp = list(filter(None, list2))
list2, list1 = zip(*sorted(zip(list2_tmp, list1)))
但是最终排序的列表是不正确的
list1
Out[164]: ('d', 'c', 'a')
list2
Out[165]: (4, 8, 9)
正确答案应该是 (d, a, b) 和 (4, 8, 9)。
但这意味着我必须删除 list1 中对应于 list2 中空白索引的元素。但是,稍后我还必须在我的代码中使用来自 list1 的原始数据。
因此,我该如何以最有效的方式对这两个列表进行排序,方法是忽略任何空白而不求助于创建占用更多内存的额外列表? (稍后我还有几十个列表要排序到 list1)
请您参考如下方法:
您可以将两个列表压缩在一起,删除带空格的条目,然后对其余部分进行排序:
sorted(pair for pair in zip(list2, list1) if pair[0] != '')
这会生成一个元组列表,因此您需要提取第二个元素:
[b for a, b in sorted(pair for pair in zip(list2, list1) if pair[0] != '')]
演示:
>>> [b for a, b in sorted(pair for pair in zip(list2, list1) if pair[0] != '')]
['d', 'a', 'b']
