0
List = ["Wednesday_A_20", "Tuesday_C_22", "Thursday-A-30"]

我可以把它排序为

List.sort(key=lambda x: x.split("_", 1)[-1])

但是否可以使用

set() 并获得所需的输出为

"Wednesday_A_20", "Tuesday_C_22"

不应该在第 1 节中有任何重复的字母。python 有更好的方法吗?提前致谢

4

2 回答 2

3

如果我理解你的话,你可以做

In [1]: mylist = ["Wednesday_A_20", "Tuesday_C_22", "Thursday_A_30"]

In [2]: key = lambda s: s.split('_')[1]

In [3]: from itertools import groupby

In [4]: [next(g) for k, g in groupby(sorted(mylist, key=key), key=key)]
Out[4]: ['Wednesday_A_20', 'Tuesday_C_22']

集合在这里并不直接适用,因为它只是一个唯一的部分,而不是整个字符串。不过,您可以使用字典。

于 2013-06-02T18:37:19.707 回答
0

如果您只需要在最后排序一次,您可能最好使用字典,其中键是 A、C 等,值是周三_A_20 等。然后在最后,获取字典。 keys() 并对它们进行排序。

如果您需要在每个步骤中按键排序的东西,您仍然使用与上述相同的键和值,但您使用的是 treap ( http://stromberg.dnsalias.org/~strombrg/treap/ )而不是 dict或红黑树(https://pypi.python.org/pypi/red-black-tree-mod)。两者都(可以)像字典一样工作,除了它们的键总是保持有序,而且它们比字典慢一点(但不比在循环中排序字典键慢!)。Treaps 平均速度更快(适用​​于批处理应用程序),但红黑树的标准偏差较低(适用于交互式应用程序)。

于 2013-06-02T20:07:06.647 回答