2013-09-22 8 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-стиля. Но я здесь ищу самый Pythonic способ сделать это.

+0

Итак, у вас есть псевдокод - напишите его на Python. В чем проблема? –

+0

@MartijnPieters Извините за путаницу! См. Обновленный вопрос. Если многие удовлетворяют условию, верните любой из них. –

+0

@MikeW Я сделал это, но он очень длинный, код C-стиля. –

ответ

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

Nice one; для Python 3 вам нужно будет использовать понимание списка вместо 'filter()', но это точно соответствует требованиям OP. –

+0

@MartijnPieters, так что часть 'или myList' срабатывает только тогда, когда никто не удовлетворяет условию? Кроме того, как я могу записать условие? 'random.choice (фильтр (> 2 ??, [1,2,3]) или [1,2,3])' –

+1

@ perfectionm1ng: если ничего не соответствует 'myCondition', тогда' filter() 'возвращает пустой список , а оператор 'or' возвращает второй операнд. –

Смежные вопросы