Подсчитать количество значений в массиве с заданным значением

Ответ Павла не совсем сработал. Модифицированный код ниже, который работает для меня на

  • windows 7 x64
  • ванильной CMD-оболочке (например, не git-bash или другой не-M $ shell) - ничего msvcrt работает в git-bash.
  • python 3.6

(Я отправляю новый ответ, потому что редактирование ответа Павла напрямую изменит его из python 2 .x -> 3.x, что кажется слишком большим для редактирования (py2 все еще используется)

import sys, time, msvcrt

def readInput( caption, default, timeout = 5):

    start_time = time.time()
    sys.stdout.write('%s(%s):'%(caption, default))
    sys.stdout.flush()
    input = ''
    while True:
        if msvcrt.kbhit():
            byte_arr = msvcrt.getche()
            if ord(byte_arr) == 13: # enter_key
                break
            elif ord(byte_arr) >= 32: #space_char
                input += "".join(map(chr,byte_arr))
        if len(input) == 0 and (time.time() - start_time) > timeout:
            print("timing out, using default value.")
            break

    print('')  # needed to move to next line
    if len(input) > 0:
        return input
    else:
        return default

# and some examples of usage
ans = readInput('Please type a name', 'john') 
print( 'The name is %s' % ans)
ans = readInput('Please enter a number', 10 ) 
print( 'The number is %s' % ans) 
21
задан Tom 23 January 2012 в 16:31
поделиться

7 ответов

Как насчет использования array_count _values ​​, чтобы получить массив со всем, что для вас рассчитано?

34
ответ дан Cellfish 23 January 2012 в 16:31
поделиться

Я не знаю, будет ли это быстрее, но стоит попробовать:

$counter = 0;
foreach($array as $value)
{
  if($value === '')
    $counter++;
}
echo $counter;
6
ответ дан Steve Tauber 23 January 2012 в 16:31
поделиться

Мы используем функцию array_filter, чтобы узнать количество значений в массиве

$array=array('','','other','','other');
$filled_array=array_filter($array);// will return only filled values
 $count=count($filled_array);
echo $count;// returns array count
2
ответ дан Bhushan Rana 23 January 2012 в 16:31
поделиться
function arrayvaluecount($array) {

    $counter = 0;
    foreach($array as $val){

        list($v)=$val;
        if($v){

        $counter =$counter+1;
        }

    }
return $counter;
}
-2
ответ дан Disposer 23 January 2012 в 16:31
поделиться

Обычно только для подсчета пробелов. Действительно зависит от варианта использования и необходимой скорости. Лично мне нравится делать вещи одной строкой.

Как и в случае с выбранным ответом, но вам все еще нужна строка для извлечения данных, необходимых для другой переменной.

$r = count($x) - count(array_filter($x));
2
ответ дан J. Chomel 23 January 2012 в 16:31
поделиться

Просто идея, вы можете использовать array_keys( $myArray, "" ), используя необязательный второй параметр, который определяет значение поиска. Затем посчитайте результат.

$myArray = array( "","","other","","other" );
$length  = count( array_keys( $myArray, "" ));
27
ответ дан Sampson 23 January 2012 в 16:31
поделиться

Вы также можете попробовать array_reduce , с функцией, которая будет просто подсчитывать интересующее вас значение. Например,

function is_empty( $v, $w )
{ return empty( $w ) ? ($v + 1) : $v; }

array_reduce( $array, 'is_empty', 0 );

Некоторые тесты могут сказать вам, быстрее ли это, чем array_count_values ​​()

3
ответ дан 29 November 2019 в 03:33
поделиться
Другие вопросы по тегам:

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