gpt4 book ai didi

python - 使用子字符串按特定顺序对列表进行排序

转载 作者:行者123 更新时间:2023-12-03 07:51:22 28 4
gpt4 key购买 nike

我有一些字符串的列表,如下所示:

my_list = ['0123_abcd', '1234_bcde', '2345_cdef', '3456_defg', '4567_efgh']

我想使用仅包含第一个列表的子字符串的另一个列表对此列表进行排序:

排序 = ['3456', '2345', '0123']

my_list 中但不在 ordering 中的每个元素都应设置为列表的末尾。所以我的预期结果是:

result_list = ['3456_defg', '2345_cdef', '0123_abcd', '1234_bcde', '4567_efgh']

到目前为止我的代码:

result_list = Sorted(my_list, key=lambda e: (ordering.index(e),e) if e in ordering else (len(ordering),e))

只要 my_list 看起来像这样,就可以正常工作:my_list = ['0123', '1234', '2345', '3456', '4567']。如果我在 my_list 中的数字后面添加下划线和一些字母,它将不起作用。我没有收到任何错误消息,但顺序错误。

所以我想我必须在代码行的某个地方使用类似 .split('_')[0] 的东西。但是

result_list =排序(my_list, key=lambda e: e.split("_")[0] (ordering.index(e),e) if e in ordering else (len(ordering),e ))也不起作用。

如何正确排序此列表?

最佳答案

如果 ordering 中的字符串是唯一的,那么这是一个可能的解决方案:

ordering_dict = {s: i for i, s in enumerate(ordering)}
sorted_list = sorted(
my_list,
key=lambda x: ordering_dict.get(x.split("_")[0], len(ordering_dict)),
)

与其他方法相比,它的优点是不具有二次复杂度!

关于python - 使用子字符串按特定顺序对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77060728/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com