Python中的总顺序

Python中的总顺序,python,algorithm,Python,Algorithm,在Python中,用什么优雅的方式来表示列表元素之间的任意值,例如下面示例中的函数torder(其中C>B>a)编辑:我假设列表定义了顺序: >>> s = ['A','B','C'] >>> torder('B') ['A'] >>> torder('C') ['A','B'] 如果列表很短,我可以使用if和elif来完成,但是我想找一些更具python风格的东西 def orde(i, s): t = sorted(s)

在Python中,用什么优雅的方式来表示列表元素之间的任意值,例如下面示例中的函数torder(其中C>B>a)编辑:我假设列表定义了顺序:

>>> s = ['A','B','C']
>>> torder('B')
['A']
>>> torder('C')
['A','B']
如果列表很短,我可以使用if和elif来完成,但是我想找一些更具python风格的东西

def orde(i, s):
    t = sorted(s)
    return t[:t.index(i)]

s = ['A','B','C']
orde("B", s)
如果列表中的位置未定义顺序:

sorted(filter(lambda x: x < 'C', s))
已排序(过滤器(λx:x<'C',s))

注意,
ord
是一个内置函数:。使用相同的名称调用函数可能不是一个好主意。您使用函数的目的是什么?定义顺序的最常见接口是comparator函数,或者如果集合的顺序同构于整数/浮点数/字符串/元组的子集,则使用“key”函数。对于排序,强烈建议使用后者。我不会考虑“返回一个包含所有小于它的参数的元素的列表”的函数,不管它是如何实现的,都是一个优雅的表示顺序的方法,除非你用一个非常具体的方式来使用这个命令,这意味着你永远不需要成对的比较。如果我是“C”并且想知道我能吃谁,这个函数很有用。对象必须是任意的,但我不想使用类。当然,将列表输出转换为布尔值或整数(如比较器)是可能的,两两比较可以使用列表的长度。这假设输入已排序。@Tichodroma:我以为列表定义了顺序。。哦,好吧,让我们希望下次他给出一个好例子。是的,它是:
列表(itertools.takewhile(lambda x:x!='Z',['a','B','C','Z','x','Y'])
结果是
['a','B','C','x','Y'],而不是
@yi H是的,我认为列表定义的顺序非常好!我仅使用['A'、'B'、'C']作为示例,并假设列表已经排序,但返回t[:t.index(I)]的简洁性非常好。
sorted(filter(lambda x: x < 'C', s))