2011-09-16 23 views
2

舉例來說,如果我有一個單詞列表:是否有可能在Python中同步列表?

Words = ['A', 'list', 'of', 'words'] 

,並希望第二列表引用的那些話的長度,我該如何實現這一目標?我知道我可以這樣做:

Lengths = map(lambda w: len(w), Words) 
[1, 4, 2, 5] 

但我必須不斷地調用該函數,每次改變單詞。

+0

也許某個班級可以讓您這樣做。 – Benjamin

+0

你能否詳細說明一下?我是一個Python新手。 :p –

+0

我想他想說你需要使用'list'的子類,所以當你改變'Words'時你可以自動更新'Lengths'。如果你的問題是「是否有內置的方式」,答案是否定的。 – agf

回答

4

你可以使用一個類:

class mywords: 
    def __init__(self, a): 
     self.words = a 
     self.length = map(lambda w: len(w), a) 
    def append(self, string): 
     self.words.append(string) 
     self.length.append(len(string)) 


a = mywords(['A', 'list', 'of', 'words']) 

a.append("this") 
print a.words 
print a.length 

這是我第一次使用一個類,所以有可能是一個更好的辦法。但是,這似乎運作良好。您需要爲其他操作定義其他方法,例如插入,刪除等。

+0

我認爲這應該工作。謝謝! –

3

在您的建議列表理解會更好看,更快:

[len(word) for word in words] 

你可以使用字典理解,像這樣:

{word: len(word) for word in words} 

但事實上,目前在沒有優勢那就是在你需要的時候生成單詞的長度。如果你迫切需要它自動更新,我建議最好的選擇就是編寫你自己的類來管理它。

+0

在我正在處理的上下文中,這有點方便 - 字長只是我想要對同步列表做的一個佔位符。如果不可能,那不是什麼大問題,但就像我說的那樣,這會有所幫助。 –

相關問題