我不理解的是代碼:sa.sort(鍵=拉姆達I:T [1:1 +步驟])`
sa.sort(key = lambda i: t[i:i + steps])
它根據子的自然順序進行排序。其實i + steps
總是比steps
大於或等於(這是len(t)
),所以它可以寫成t[i:]
而不是(這使得代碼更容易理解)
你會更好地理解使用裝飾/排序/去除裝飾圖案:
>>> t = "azerty"
>>> sa = range(len(t))
>>> print sa
[0, 1, 2, 3, 4, 5]
>>> decorated = [(t[i:], i) for i in sa]
>>> print decorated
[('azerty', 0), ('zerty', 1), ('erty', 2), ('rty', 3), ('ty', 4), ('y', 5)]
>>> decorated.sort()
>>> print decorated
[('azerty', 0), ('erty', 2), ('rty', 3), ('ty', 4), ('y', 5), ('zerty', 1)]
>>> sa = [i for (_dummy, i) in decorated]
>>> print sa
[0, 2, 3, 4, 5, 1]
和SF = T [SA [I]:SA [I] +步驟]
這也可以更簡單地寫作:
for i in range(len(sa)):
sf = t[sa[i] : sa[i] + steps]
=>
for x in sa:
sf = t[x:]
print sf
其產生:
azerty
erty
rty
ty
y
zerty
你會發現,這正是使用(然後丟棄) 在裝飾/排序/去除裝飾鍵上面的例子,所以整個事情可以改寫爲:
def foo(t):
decorated = sorted((t[i:], i) for i in range(len(t)))
for sf, index in decorated:
print sf
# do something with sf here
至於什麼,這一切都是應該做的,我完全失去了處,但至少你現在有一個更Python的這段代碼的(可讀...)版本;)
你能提供的示例'sa'和'steps'(我假設'steps'是整數,但你知道他們對假設的看法......)? – blacksite
@not_a_robot,別忘了't'。 't'是所有這些的中心,但我們不知道它是什麼,除了大概的列表。 –
打印出每個單獨的表達/變量,那麼,直到打印出整個表達式慢慢打印出越來越大的它們的組合。 – BallpointBen