2017-04-20 53 views
1

我對Python有一些基本的知識,但是我不知道下面的代碼是怎麼回事。有人可以幫我解釋或「翻譯」成更正常/常見的表達方式嗎?不理解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' 實際上是一個字符串

謝謝。

+0

你能提供的示例'sa'和'steps'(我假設'steps'是整數,但你知道他們對假設的看法......)? – blacksite

+3

@not_a_robot,別忘了't'。 't'是所有這些的中心,但我們不知道它是什麼,除了大概的列表。 –

+0

打印出每個單獨的表達/變量,那麼,直到打印出整個表達式慢慢打印出越來越大的它們的組合。 – BallpointBen

回答

2

我不理解的是代碼: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的這段代碼的(可讀...)版本;)

1

lambda in sort定義列表將要根據哪些標準進行排序。 換句話說,該列表不會根據其值進行簡單排序,而是根據應用於該值的函數進行排序。 查看更多詳情,請點擊here

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