[英]Don't understand Python Expression
我有一些關於Python的基本知識,但我不知道下面的代碼是什么。 有人可以幫助我解釋或“翻譯”成更正常/普通的表達嗎?
steps = len(t)
sa = [i for i in range(steps)]
sa.sort(key = lambda i: t[i:i + steps])#I know that sa is a list
for i in range(len(sa)):
sf = t[sa[i] : sa[i] + steps]
't'實際上是一個字符串
謝謝。
我不明白的是代碼:sa.sort(key = lambda i:t [i:i + steps])`
sa.sort(key = lambda i: t[i:i + steps])
它根據子串t[i:i+len(t)]
的自然排序對sa
進行排序。 實際上i + steps
總是大於或等於steps
( len(t)
)所以它可以寫成t[i:]
而不是(這使得代碼更容易理解)
您將更好地理解使用decorate / sort / undecorate模式:
>>> 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
您會注意到這正是上面的decorate / sort / undecorate示例中使用(然后丟棄)的鍵,所以整個事情可以重寫為:
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
至於所有這一切應該做什么,我完全迷失了,但至少你現在有一個更加pythonic(可讀...)版本的代碼;)
sort
的lambda
定義了要對列表進行排序的條件。 換句話說,列表不會簡單地根據其值進行排序,而是根據應用於值的函數進行排序。 看看這里了解更多細節。
看起來你正在做的是根據輸入字符串t的子字符串的字母順序對列表進行排序。
以下是發生的事情:
t = 'hello' # EXAMPLE
steps = len(t)
sa = [i for i in range(steps)]
sort_func = lambda i: t[i:i + steps]
for el in sa:
print sort_func(el)
#ello
#hello
#llo
#lo
#o
所以這些是決定列表排序的值。
transf_list = [sort_func(el) for el in sa]
sorted(transf_list)
# ['ello', 'hello', 'llo', 'lo', 'o']
因此:
sa.sort(key = sort_func)#I know that sa is a list
# [1, 0, 2, 3, 4]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.