簡體   English   中英

不懂Python表達式

[英]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總是大於或等於stepslen(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(可讀...)版本的代碼;)

sortlambda定義了要對列表進行排序的條件。 換句話說,列表不會簡單地根據其值進行排序,而是根據應用於值的函數進行排序。 看看這里了解更多細節。

看起來你正在做的是根據輸入字符串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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM