什麼是代表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