2013-09-22 128 views
1

我希望在Python中實現以下簡單的算法。 這是它的僞代碼。Pythonic這樣做的方式?

for elem in myList: 
    if only one elem satisfies myCondition: 
     returns it 
    if more than one satisfies myCondition: 
     randomly return one out of them 
    if none satisfies myCondition: 
     randomly return any one 

我當然可以在C風格的代碼片段中實現它。但我在這裏尋找這樣做的最Python的方式

+0

所以你有僞代碼-go寫在Python中。有什麼問題? – 2013-09-22 09:23:45

+0

@MartijnPieters對不起,困惑!請參閱更新的問題。如果許多人滿足條件,則退回任何一個。 –

+0

@MikeW我已經完成了它,但它很長,一個C型代碼.. –

回答

10
return random.choice(filter(myCondition, myList) or myList) 
+0

不錯的一個;對於Python 3,您必須使用列表理解而不是'filter()',但這完全滿足OP要求。 –

+0

@MartijnPieters所以'或myList'部分只有在沒有任何條件滿足時纔會啓動?另外,我怎麼寫條件部分? 'random.choice(filter(> 2 ??,[1,2,3])or [1,2,3])' –

+1

@ perfectionm1ng:如果沒有匹配myCondition,則filter()返回一個空列表,然後'或'運算符返回第二個操作數。 –

相關問題