2012-09-26 47 views
1

我有'tups'中的元組列表,並已應用以下代碼進行過濾。元組列表的格式爲[(floata,stra1,stra2),(floatb,strb1,strb2),...etc]解釋一個Python構造

keys=sorted({t[2] for t in tups}) 
for key in keys:  
    group=filter(lambda t: t[2]==key,tups)  
    print '{}:\n\tmax: {}\n\tmin: {}'.format(key,max(group),min(group)) 

起初我還以爲大括號是一個錯誤,並改變了他們方括號。我沒有得到語法錯誤,但代碼沒有工作。作爲最後的手段,我更換了括號,一切都很好。有人可以解釋這個建築嗎?這是字典理解嗎?在文檔中對此進行了解釋?

+1

你在說什麼大括號? –

回答

4

如果您的意思是第一行中的大括號,this is a set comprehension。這將在tups中創建一組來自每個元組的第三項。一個集合類似於一個列表,但沒有順序,因此不能包含重複。

如果你的意思是括號中的字符串,這只是new-style string formatting。調用str.format()會將這些大括號更改爲傳遞的值。

+0

@Wooble當我回答時沒有看到其他的,我認爲你是對的。 –

+0

感謝您的回覆。這解釋了這種結構。我的印象是花括號定義了一本字典,我沒有想到套。大括號在Python 2.5中給了我一個錯誤,但在2.7中運行,我想知道爲什麼。 – user1642486

+0

@ user1642486,似乎集合理解從3.1被反向移植到2.7,但我不認爲他們更新了2.7文檔來反映它。請參閱http://docs.python.org/dev/whatsnew/2.7.html#python-3-1-features –

0

的Python 2.6之前,你會使用:

print '%s:\n\tmax: %s\n\tmin: %s' % (key,max(group),min(group)) 

格式化使用佔位符(在%s)的字符串。

因爲Python 2.6,你可以使用{}語法佔位符和.format來代替:

print '{}:\n\tmax: {}\n\tmin: {}'.format(key,max(group),min(group)) 

或使用位置參數:

print '{0}:\n\tmax: {2}\n\tmin: {1}'.format(key,min(group),max(group)) 

(請注意,我改變的參數的順序,但輸出是相同的:我們用{2}來表示第三個參數......)

J UST的忠告:當你得到了很多的爭論,很容易給它們命名,如:

print '{key}:\n\tmax: {groupmax}\n\tmin: {groupmin}'.format(key=key,groupmin=min(group),groupmax=max(group)) 

.format語法比更強大的%之一:例子是在documentation可用。

+0

偉大的信息,但我在第一行代碼中引用花括號。謝謝! – user1642486

+0

@ user1642486:oops ... –