gpt4 book ai didi

python - 如何按子列表的内容对子列表列表进行排序,其中子列表包含字符串和 bool 值?

转载 作者:行者123 更新时间:2023-12-01 15:02:28 25 4
gpt4 key购买 nike

我有一个包含数千个子列表的列表。这些子列表中的每一个都包含混合字符串和 bool 值的组合,例如:

lst1 = [['k', 'b', False], ['k', 'a', True], ['a', 'a', 'a'], ['a', 'b', 'a'], ['a', 'a' , False], ...]

我想根据子列表的内容对此列表进行排序,例如:
lst2 = [['a', 'a', 'a'], ['a', 'a' , False], ['a', 'b', 'a'], ['k', 'a', True], ['k', 'b', False], ...]

我试过这样排序:
lst2 = sorted([list(sorted(x)) for x in lst1])
print(lst2)

由于某些字段中 bool 值与字符串的组合,这不起作用,所以我得到 TypeError: '<' not supported between instances of 'bool' and 'str' .

我还尝试了一种蛮力方法,创建所有可能的组合,然后检查它们是否在第一个列表中:
col1 = ['a', 'b', 'c', d, e, f, g, h, i, j, k, ..., True, False]
col2 = ['a', 'b', 'c', d, e, f, g, h, i, j, k, ..., True, False]
col3 = ['a', 'b', 'c', d, e, f, g, h, i, j, k, ..., True, False]
lst2 = list()
for t1 in col1:
for t2 in col2:
for t3 in col3:
test_sublist = [t1, t2, t3]
if test_sublist in lst1:
lst2.append(test_sublist)

这种方法很有效,因为我可以为每一列自动创建排序列表, col 1 , col 2 , 和 col 3 ,但运行时间太长(超过 3 天)。

是否有更好的解决方案来对这样的混合字符串/ bool 列表进行排序?

最佳答案

这些处理任何长度,而不仅仅是长度 3。并且可以在任何地方使用 bool 值,而不仅仅是最后一列。对于键控,他们将每个子列表的每个元素转换为一个元组。

解决方案1:

sorted(lst1, key=lambda s: [(e is False, e is True, e) for e in s])

将字符串变成 (False, False, thestring)所以他们先来。
True进入 (False, True, True)所以接下来。
False进入 (True, False, False)所以它是最后一个。

虽然我认为它是相反的方式,如“首先降低 False 的优先级,然后降低 True 的优先级”。一般形式是 key=lambda x: (shall_come_last(x), x) .

解决方案2:
sorted(lst1, key=lambda s: [((e is True) + 2 * (e is False), e) for e in s])

将字符串变成 (0, thestring)所以他们先来。
True进入 (1, True)所以接下来。
False进入 (2, False)所以它是最后一个。

解决方案3:
sorted(lst1, key=lambda s: [(0, e) if isinstance(e, str) else (2 - e,) for e in s])

将字符串变成 (0, thestring)所以他们先来。
True进入 (1,)所以接下来。
False进入 (2,)所以它是最后一个。

关于python - 如何按子列表的内容对子列表列表进行排序,其中子列表包含字符串和 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59790440/

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