我在这里有一个大的嵌套列表,这是简化的,因为实际的列表有几十个列表:
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)
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |