有没有办法使用lambda表达式执行以下python sort
?
sorted_urls = []
for url in all_urls:
if '/en-' in url:
sorted_urls.insert(0, url)
else:
sorted_urls.append(url)
second_sorted_urls = []
for url in sorted_urls:
if '/season-' not in url:
second_sorted_urls.insert(0, url)
else:
second_sorted_urls.append(url)
换句话说,我想按以下方式对其进行排序:'season-' not in url
ASC,'en' in url
ASC
答案 0 :(得分:2)
是。元组依次按每个元素自然排序,而布尔值排序new_branch_name
,所以只需使用lambda给出一个元组键:
False < True
布尔值被反转,因为sorted_urls = sorted(all_urls, key=lambda x: ('season-' in x, 'en' not in x))
值将被排序到排序列表的开头。您也可以使用False
。
答案 1 :(得分:1)
不确定这是否是您问题的焦点,但由于{{1},您的代码似乎具有Ω(n 2 )的复杂性}}。由于排序,您提出的解决方案具有Θ(log(n))复杂性。实际上,这可以通过 O(n)时间来完成。
假设您对以下4个列表使用列表解析。
insert(0, ...)
您现在可以轻松地以任何您喜欢的方式附加它们。
答案 2 :(得分:0)
您正在寻找的内容是filter。 Sorted将仅对默认情况下已存在的内容进行排序。
urls = ['these', 'are', 'my/en', 'test', 'urls/en']
sorted_urls_without_en = sorted(filter(lambda x: '/en' not in x, urls))
# ['are', 'test', 'these']
然后您可以对它们进行排序。