Как посчитать число единиц в строке
Перейти к содержимому

Как посчитать число единиц в строке

  • автор:

Как правильно можно узнать количество определенных символов в String/Integer’e?

Коллеги, вопрос такой: Как правильно можно узнать количество определенных символов в String/Integer’e? Допустим есть строка 1110001101011 — мне нужно из нее узнать кол-во единиц или нулей, как на Java это сделать? Стандартных методов нет.

Отслеживать
задан 15 мая 2012 в 11:15
Павел Шестаков Павел Шестаков
135 1 1 золотой знак 4 4 серебряных знака 15 15 бронзовых знаков
Пройтись циклом, посчитать нули и единицы. В чем вопрос?
15 мая 2012 в 11:18
Просто удивительно, какой резонанс вызвала простейшая и похоже оторванная от реальной жизни задача.
16 мая 2012 в 8:25
Жду в ответах фабрику фабрик счетчиков символов )
17 мая 2012 в 7:22
Не накаркайте. А то можете получить фабрику фабрик счётчиков счётчиков символов.
17 мая 2012 в 9:09

5 ответов 5

Сортировка: Сброс на вариант по умолчанию

Наверное самый простой способ будет посимвольный разбор строки и сравнение каждого элемента отдельно, что-то вроде:

String str = "1100011"; int countNulls=0, countOnes = 0; for (char element : str.toCharArray())

Отслеживать
34.6k 15 15 золотых знаков 66 66 серебряных знаков 95 95 бронзовых знаков
ответ дан 15 мая 2012 в 11:29
1,675 1 1 золотой знак 10 10 серебряных знаков 15 15 бронзовых знаков
Ну для 0 и 1 можно: int cnt[] = <0, 0>; for (char element: str.toCharArray()) cnt[element — ‘0’]++;
15 мая 2012 в 12:27

Далее только оптимизация) String str = «1100011»; int countNulls = 0 for (char element : str.toCharArray()) < if (element == '0') < countNulls++; >> int countOnes = str.length() — countNulls;

15 мая 2012 в 20:29

import java.util.*; import java.lang.*; class Main < public static void main (String[] args) throws java.lang.Exception < String string = "1110001101011"; Mapmap = new HashMap(); for ( int i = 0; i < string.length(); i++ ) < Integer n = map.get( string.charAt(i) ); if ( n == null ) map.put( string.charAt(i), 1 ); else map.put( string.charAt(i), ++n ); >System.out.println(map); > > 

Отслеживать
ответ дан 16 мая 2012 в 5:47
2,449 1 1 золотой знак 16 16 серебряных знаков 15 15 бронзовых знаков

Если в строке только 0 и 1, то проверка в цикле выглядит некрасиво. Лучше сразу занести пары («0», 0) и («1», 0).

16 мая 2012 в 6:12

Согласен для частного случая, однако у меня общее решение и покормить придется всем basic multilingual plane, что совсем некошерно. Уж проще тогда сделать сахарный класс, который будет принимать null за 0.

16 мая 2012 в 6:46

Если эффективно, то цикл. Если штатно — то есть готовый метод — countMatches. Прям с демками. В общем случае лучше предпочитать готовые библиотечные функции, так как обычно они уже достаточно хорошо работают. И только если они не удовлетворяют по скорости/качеству (либо просто нет таких), тогда писать свой велосипед.

Но если это учебное задание, то тогда нужно писать так, как хочет преподаватель, и не важно, эффективно или нет, так как для некоторых преподавателей важно, что бы они понимали решение.

Но ещё я в условии заметил слово «Integer». Но в Integer’e нет символов (при желании их конечно можно найти там, например рассматривая Integer как 4 (или 2) char. Но это что то не то:)

Отслеживать
ответ дан 16 мая 2012 в 19:26
112k 6 6 золотых знаков 94 94 серебряных знака 161 161 бронзовый знак

У меня есть подозрение, что задача состоит в нахождении количества бит целого, равных 1. Просто автор не знает, что всего в Integer 32 бита.

16 мая 2012 в 20:43
Насчет штатного не совсем правда, это Apache Commons.
16 мая 2012 в 21:15
Apache Commons — это как boost для с++. Большая подборка хороших велосипедов.
17 мая 2012 в 6:41

данное решение позволяет считать любые символы, у вас есть возможность самому задавать символы которые нужно посчитать. теоретически должно работать с приемлимой производительностью:

public class CountCharacters < public static void main(String[] args) < // two usage examples for provided input string countCharacters("1110001101011", '0', '1'); countCharacters("1110001101011", new char[] ); // usage example for custom string countCharacters("00112233445566778800qwertyuiop[]<>asdfghjkl;'zxcvbnm,./", '0', '1', 'a', 'b', 'c'); > private static void countCharacters(String inputString, char. interestedCharacters) < final int[] occurences = new int[256]; final char[] array = inputString.toCharArray(); for (final char c : array) < occurences[c] = occurences[c] + 1; >// dump results for characters you are interested in for (int i = 0; i < interestedCharacters.length; i++) < System.out.println("found '" + occurences[interestedCharacters[i]] + "' occurences for character '" + interestedCharacters[i] + "'"); >System.out.println(); > > 

выводит в консоль:

found '5' occurences for character '0' found '8' occurences for character '1' found '5' occurences for character '0' found '8' occurences for character '1' found '4' occurences for character '0' found '2' occurences for character '1' found '1' occurences for character 'a' found '1' occurences for character 'b' found '1' occurences for character 'c' 

p.s. минусы, — неоптимальное использование памяти + нет поддержки кодировок. в принцыпе последнее можно легко исправить

аналогичным образом работает решение для int’ов:

private static int[] ALL_DIGITS = new int[] < 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 >; protected static void countNumbers(int i) < countNumbers(i, ALL_DIGITS); >protected static void countNumbers(int value, int. digits) < // number consists of only 10 digits int[] occurences = new int[10]; // copy value int x = value; while (x >= 10) < int low = x % 10; occurences[low] = occurences[low] + 1; x = (x - low) / 10; >occurences[x] = occurences[x] + 1; // dump results for digits you are interested in for (int i = 0; i < digits.length; i++) < System.out.println("found '" + occurences[digits[i]] + "' occurences for digit '" + digits[i] + "'"); >System.out.println(); > 
countNumbers(111000110, 0, 1); countNumbers(1234567890); 
found '4' occurences for digit '0' found '5' occurences for digit '1' found '1' occurences for digit '0' found '1' occurences for digit '1' found '1' occurences for digit '2' found '1' occurences for digit '3' found '1' occurences for digit '4' found '1' occurences for digit '5' found '1' occurences for digit '6' found '1' occurences for digit '7' found '1' occurences for digit '8' found '1' occurences for digit '9' 

Как посчитать количество цифр в строке в Python

Обложка к статье

В данной статье мы рассмотрим несколько способов подсчёта цифр в строке на Python, начиная от простых и интуитивно понятных методов, таких как использование циклов и условных операторов, до более сложных и мощных решений с применением регулярных выражений и генераторов списков.

Использование цикла, условных операторов и метода .isdigit() для нахождения количества цифр в строке Python

Один из самых базовых и интуитивно понятных методов подсчета цифр в строке в Python является метод с использование цикла в сочетании с условными операторами и методом строки .isdigit() .

Принцип метода

Идея метода заключается в переборе каждого символа в строке и проверке, является ли он цифрой с помощью условного оператора. Если символ — цифра, увеличиваем счетчик на единицу.

Для начала рассмотрим код для решения задачи, а после разберём как он работает:

# Допустим, у нас есть следующая строка: text = "Python 3.9 выпущен 5 октября 2020 года" # Инициализируем счетчик цифр digit_count = 0 # Перебираем каждый символ в строке for char in text: # Проверяем, является ли символ цифрой if char.isdigit(): # Увеличиваем счетчик, если символ - цифра digit_count += 1 # Выводим количество цифр в строке print(f"Количество цифр в строке: ")

Объяснение кода

  1. Инициализация счетчика: Сначала мы задаем переменную digit_count равной нулю. Она будет использоваться для подсчета цифр в строке.
  2. Цикл по символам строки: С помощью цикла for мы последовательно перебираем каждый символ в строке text .
  3. Проверка на цифру: Для каждого символа char используем метод .isdigit() , чтобы проверить, является ли он цифрой. Если условие истинно, увеличиваем digit_count на единицу.
  4. Вывод результата: После завершения цикла выводим общее количество найденных цифр в строке.

Использование генераторов списков для нахождения количества цифр в строке Python

Генераторы списков (list comprehensions) в Python представляют собой компактный и выразительный способ для создания списков. Они особенно удобны для преобразования одного списка в другой, фильтрации его элементов по определенному критерию и применения функции к каждому элементу. Используя генераторы списков для подсчета цифр в строке, мы можем значительно сократить количество кода, увеличить его читаемость и упростить процесс написания.

Рассмотрим код для нахождение количества цифр в строке Python с помощью генератора списков, а после разберём как он работает:

# Данная строка для анализа text = "В 2023 году моя цель - прочитать 30 книг." # Использование генератора списков для подсчета цифр digit_count = sum(1 for character in text if character.isdigit()) # Вывод результата print(f"Количество цифр в строке: ")

Объяснение кода

  • Определение строки: В переменной text хранится строка, в которой необходимо посчитать количество цифр.
  • Генератор списка: Выражение 1 for character in text if character.isdigit() создает генератор, который генерирует число 1 для каждого символа в строке text , если этот символ является цифрой (проверка character.isdigit() ). Таким образом, для каждой цифры в строке генерируется единица.
  • Функция sum() : Функция sum() используется для подсчета всех единиц, сгенерированных генератором, что и дает нам общее количество цифр в строке.

Использование регулярных выражений для нахождения количества цифр в строке Python

Регулярные выражения в Python — это мощный инструмент для поиска и обработки строк по определенным шаблонам. Они предоставляют гибкий способ поиска и извлечения информации из текста, включая нахождение всех цифр в строке. Использование регулярных выражений для подсчета количества цифр позволяет реализовать эту задачу эффективно и с минимальным количеством кода.

Для подсчета цифр в строке можно использовать функцию re.findall() , которая ищет все неперекрывающиеся совпадения с заданным шаблоном. В данном случае шаблоном будет регулярное выражение \d , соответствующее любой цифре.

Рассмотрим код для нахождение количества цифр в строке Python с помощью регулярных выражений, а после разберём как он работает:

import re # Данная строка для анализа text = "В 2023 году моя цель - прочитать 30 книг." # Использование re.findall() для поиска всех цифр в строке digits = re.findall(r'\d', text) # Подсчет количества найденных цифр digit_count = len(digits) # Вывод результата print(f"Количество цифр в строке: ")

Объяснение кода

  • Импорт модуля re : Сначала необходимо импортировать модуль регулярных выражений re .
  • Определение строки: В переменной text хранится строка, в которой нужно найти и посчитать цифры.
  • Поиск цифр: Функция re.findall(r’\d’, text) применяется к строке text с шаблоном регулярного выражения \d , который соответствует любой цифре. Результатом является список digits , содержащий все найденные цифры.
  • Подсчет цифр: Для определения количества цифр в строке вычисляется длина списка digits с помощью функции len() .

Как посчитать количество единиц в строке на Python: простой способ

Подсчет количества единиц в строке на языке Python является часто встречающейся задачей, особенно при работе с двоичными значениями или задачами, связанными с битовой манипуляцией. В этой статье мы рассмотрим несколько способов решения этой задачи, с использованием различных подходов и функций языка Python.

Метод 1: Использование цикла для перебора символов строки

Один из самых простых способов подсчета количества единиц в строке — это использование цикла для перебора каждого символа в строке и проверки, является ли он единицей. Давайте посмотрим на пример кода:

 def count_ones(string): count = 0 for char in string: if char == '1': count += 1 return count # Пример использования функции string = "1101010101" print(count_ones(string)) # Output: 6 

В этом примере мы определяем функцию count_ones , которая принимает строку в качестве параметра. Мы инициализируем переменную count с нулем и затем перебираем каждый символ в строке. Если символ равен ‘1’, мы увеличиваем счетчик count на 1. По завершении цикла, возвращаем значение count .

Метод 2: Использование метода str.count()

Python предоставляет метод count() , который позволяет с легкостью подсчитать количество вхождений указанного символа или подстроки в строке. В нашем случае мы будем использовать его для подсчета единиц в строке. Пример кода:

 def count_ones(string): return string.count('1') # Пример использования функции string = "1101010101" print(count_ones(string)) # Output: 6 

В этом примере мы определяем функцию count_ones , которая принимает строку в качестве параметра. Возвращаем результат вызова метода count(‘1’) для строки, которую мы хотим проанализировать.

Метод 3: Использование регулярных выражений

Еще один способ подсчета количества единиц в строке — использование модуля re для работы с регулярными выражениями. Модуль re предоставляет функцию findall() , которая возвращает все совпадения указанного шаблона в строке. Давайте посмотрим на пример:

 import re def count_ones(string): return len(re.findall('1', string)) # Пример использования функции string = "1101010101" print(count_ones(string)) # Output: 6 

В этом примере мы импортируем модуль re и определяем функцию count_ones , которая принимает строку в качестве параметра. Мы используем функцию findall() из модуля re для поиска всех совпадений символа ‘1’ в строке. Затем мы возвращаем длину списка с помощью функции len() , чтобы получить общее количество единиц в строке.

Вывод

Теперь вы знаете несколько способов подсчета количества единиц в строке на языке Python. Вы можете выбрать наиболее удобный для вас подход, в зависимости от контекста и требований вашей задачи. Используйте кодовые примеры из этой статьи в своих проектах и экспериментируйте с ними, чтобы расширить свои навыки программирования на Python.

Как подсчитать процент количества единиц в строке?

Стоит задача при вводе параметра, который состоит из рандомного количества нулей и единиц, функция должна возвращать процент количества единиц. Я знаю, как подсчитать количество символов в строке, но мне неизвестен метод, который может подсчитать количество определенных символов в строке. Подскажите вариант решения?

function getSuccessRate(statistic) < return statistic.length >console.log(getSuccessRate('001101')) 

Отслеживать
6,904 2 2 золотых знака 27 27 серебряных знаков 57 57 бронзовых знаков
задан 24 апр 2020 в 13:52
user382492 user382492
19 2 2 бронзовых знака

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Можно воспользоваться регулярным выражением /1/g , чтобы найти все единицы и затем просто разделить одну длину ну другую:

statistic.match(/1/g).length / statistic.length 

Либо пройтись в цикле по строке и посчитать:

var counter = 0; for (var i=0; i < statistic.length; i++) < if (statistic[i] == '1') counter = counter + 1; >var result = counter / statistic.length 

Отслеживать
ответ дан 24 апр 2020 в 14:01
81.6k 9 9 золотых знаков 78 78 серебряных знаков 136 136 бронзовых знаков

function getSuccessRate(statistic) < if (!statistic) < return 0; >// создадим проверку, если строка пустая возвращаем ноль /*посчитаем сколько единиц в нашей строке, переберем все символы с помощью for of*/ /*если наш текущий символ 1, то мы должны его посчитать, создадим счетчик count*/ let count = 0; for (const char of statistic) < if (char === '1') < count++; // как только найдем 1 то увеличиваем count на единицу >> /* теперь нужно посчитать сколько процентов, для этого возвращаем округленное значение, исп. Math.round(result) для округления до ближайшего целого*/ /* 1 - берем наше количество единичек(count), 2 - делим их на длину строки(statistic.length ) и умножаем на 100 */ return Math.round((count / statistic.length) * 100); > **************************** function getSuccessRate(statistic) < if (!statistic) < return 0; >let count = 0; for (const char of statistic) < if (char === '1') < count++; >> return Math.round((count / statistic.length) * 100); > console.log(getSuccessRate('001101')); 

Отслеживать
ответ дан 28 авг 2021 в 16:14
Helena Evangeline Falko Helena Evangeline Falko
27 4 4 бронзовых знака

Этот вариант прошел, собравши по крупицам инфу с нескольких форумов

let getSuccessRate = (statistic) => < if(statistic === '')< return 0 >else < let length = statistic.length let charSplit = statistic.split(''); let result = charSplit.filter(char =>char === '1'); return +((result.length/length)*100).toFixed(0); > >; 

Отслеживать
ответ дан 24 апр 2020 в 15:42
user382492 user382492
19 2 2 бронзовых знака

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.4.29.8372

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *