Skip to main content
 首页 » 编程设计

python之在 Python 3 中对两个列表进行排序时如何忽略任何空格或空格

2025年05月04日10soundcode

我这里有一个大的嵌套列表,它被简化了,因为实际的列表有几十个列表:

 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']