什么是代表Python中列表元素之间任意total order的优雅方式,例如,函数torder在以下示例中(其中C> B> A)。 编辑:我假设该列表定义的顺序:Python中的全部订单
>>> s = ['A','B','C']
>>> torder('B')
['A']
>>> torder('C')
['A','B']
我能做到这一点使用如果和ELIF如果列表很短,但一直在寻找一些更Python。
什么是代表Python中列表元素之间任意total order的优雅方式,例如,函数torder在以下示例中(其中C> B> A)。 编辑:我假设该列表定义的顺序:Python中的全部订单
>>> s = ['A','B','C']
>>> torder('B')
['A']
>>> torder('C')
['A','B']
我能做到这一点使用如果和ELIF如果列表很短,但一直在寻找一些更Python。
def orde(i, s):
t = sorted(s)
return t[:t.index(i)]
s = ['A','B','C']
orde("B", s)
非常好!我只用['A','B','C']作为示例,并假定列表已经排序,但返回t [:t.index(i)]的简洁性很好。 – Vladtn 2012-02-27 14:45:50
import itertools
itertools.takewhile(lambda x: x != 'C', s)
如果为了不被在列表中的位置定义:
sorted(filter(lambda x: x < 'C', s))
这假设输入是排序的。 – 2012-02-27 14:45:32
@Tichodroma:我认为列表定义了顺序..哦,让我们希望他下次给出一个很好的例子。 – 2012-02-27 14:46:30
是的,它包含:'list(itertools.takewhile(lambda x:x!='Z',['A','B','C','Z','X','Y'])) ''A','B','C'],而不是'['A','B','C','X','Y']'。 – 2012-02-27 14:48:42
注意'ord'是一个内置的功能:http://docs.python.org/library /functions.html#ord。将您的功能称为相同的名称可能不是一个好主意。 – Hooked 2012-02-27 14:44:50
@Hooked刚刚改变了它 – Vladtn 2012-02-27 14:47:22
你用什么函数?定义一个订单最常用的接口是一个比较函数,或者如果你的集合是同构于整数/浮点数/字符串/元组的子集,那么你使用“键”函数。后者非常适合分类。我不认为“一个返回一个包含所有小于它的参数的元素的列表的函数”是一种表达顺序的优雅方式,不管这个函数是如何实现的,除非你以一种非常具体的方式使用这个顺序,你永远不需要成对比较。 – 2012-02-27 15:10:35