在Python 3中将两个列表排序在一起时如何忽略任何空格或空格?

bwr*_*wrr 1 python python-3.x

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

 bigNestedList = [["d", "c", "a", "b", "e"],[4,"",8,9,""],.....]
Run Code Online (Sandbox Code Playgroud)

为简单起见,我将它们分成两个单独的列表:

list1 = ["d", "c", "a", "b", "e"]
list2 = [4,"",8,9,""]
Run Code Online (Sandbox Code Playgroud)

我想按升序对list2排序list1.但是问题出现在list2中的空格.

我试图删除list2中的空格并对它们进行排序:

list2_tmp = list(filter(None, list2))

list2, list1 = zip(*sorted(zip(list2_tmp, list1)))
Run Code Online (Sandbox Code Playgroud)

但是最终的排序列表不正确

list1
Out[164]: ('d', 'c', 'a')

list2
Out[165]: (4, 8, 9)
Run Code Online (Sandbox Code Playgroud)

正确的答案应该是(d,a,b)和(4,8,9).

但这意味着我必须删除list1中与list2中空白索引相对应的元素.但是我必须在我的代码中使用list1中的原始数据.

因此,如何通过忽略任何空白而不是创建耗尽更多内存的额外列表,以最有效的方式对这两个列表进行排序?(我有几十个列表,以便稍后将其分类为list1)

Mar*_*ers 11

您可以将两个列表压缩在一起,删除带有空格的条目,然后对其余列表进行排序:

sorted(pair for pair in zip(list2, list1) if pair[0] != '')
Run Code Online (Sandbox Code Playgroud)

这会生成一个元组列表,因此您需要提取第二个元素:

[b for a, b in sorted(pair for pair in zip(list2, list1) if pair[0] != '')]
Run Code Online (Sandbox Code Playgroud)

演示:

>>> [b for a, b in sorted(pair for pair in zip(list2, list1) if pair[0] != '')]
['d', 'a', 'b']
Run Code Online (Sandbox Code Playgroud)