Какой хороший способ сделать показ в Python

Только мои 2 цента:

std::vector<bool>::reference является typedef для struct _Bit_reference, который определяется как

typedef unsigned long _Bit_type;

struct _Bit_reference
  {
    _Bit_type * _M_p;
    _Bit_type _M_mask;

    // constructors, operators, etc...

    operator bool() const
    { return !!(*_M_p & _M_mask); }
  };

. Меняя функцию, подобную этой, она работает (ну, компилирует, по крайней мере, не проверял):

template< typename T >
void callIfToggled( bool v1, std::vector<bool>::reference v2, T & t )
{
    bool b = v2;  
    if ( v1 != b )
    {
        v2 = v1;
        t.foo();
    }
}

EDIT: я изменил условие от (v1! = v2), что не было хорошей идеей, (v1! = b).

38
задан Gordon Wrigley 22 April 2016 в 12:48
поделиться

2 ответа

Подход, основанный на итераторах, просто отлично. Есть несколько небольших изменений, которые могут подчеркнуть тот факт, что вы считаете:

sum(1 if meets_condition(x) else 0 for x in my_list)
# or 
sum(1 for x in my_list if meets_condition(x))

И, как всегда, если намерение не очевидно из кода, инкапсулируйте его в функцию с описательно названным именем:

def count_matching(condition, seq):
    """Returns the amount of items in seq that return true from condition"""
    return sum(1 for item in seq if condition(item))

count_matching(meets_condition, my_list)
52
ответ дан 27 November 2019 в 02:38
поделиться

Первый

sum(meets_condition(x) for x in my_list)

кажется мне отлично читаемым и питоническим.

Если вы предпочитаете второй подход, я бы выбрал

len(filter(meets_condition, my_list))

Еще один способ:

map(meets_condition, my_list).count(True)
13
ответ дан 27 November 2019 в 02:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: