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 有更好的方法吗?提前致谢
如果我理解你的话,你可以做
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']
集合在这里并不直接适用,因为它只是一个唯一的部分,而不是整个字符串。不过,您可以使用字典。
如果您只需要在最后排序一次,您可能最好使用字典,其中键是 A、C 等,值是周三_A_20 等。然后在最后,获取字典。 keys() 并对它们进行排序。
如果您需要在每个步骤中按键排序的东西,您仍然使用与上述相同的键和值,但您使用的是 treap ( http://stromberg.dnsalias.org/~strombrg/treap/ )而不是 dict或红黑树(https://pypi.python.org/pypi/red-black-tree-mod)。两者都(可以)像字典一样工作,除了它们的键总是保持有序,而且它们比字典慢一点(但不比在循环中排序字典键慢!)。Treaps 平均速度更快(适用于批处理应用程序),但红黑树的标准偏差较低(适用于交互式应用程序)。