Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 12, 2022 13:28:04

AlLinik
Зарегистрирован: 2022-05-17
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Количество вхождений определенной цифры (от 0 до 9) в списке чисел.

Всем привет!
Есть список a
Получается, количество числа “1” в списке а = 2, а цифр “1” = 6.
Подскажите, как вывести количество цифр 1, входящих в список а?

Вот решение для вывода числа “1”:

 a = [1, 12, 121, 1, 10]
b = 0
for i in a:
    if i == 1:
        b += 1
print(b)

Всем откликнувшимся спасибо!!!

Отредактировано AlLinik (Июнь 12, 2022 13:28:42)

Офлайн

#2 Июнь 12, 2022 14:13:28

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1364
Репутация: +  120  -
Профиль   Отправить e-mail  

Количество вхождений определенной цифры (от 0 до 9) в списке чисел.

 a = [1, 12, 121, 1, 10]
def count_digit(digit, target_digit):
    count = 0
    while digit != 0:
        if digit % 10 == target_digit:
            count += 1
        digit //= 10
    return count
res =sum(count_digit(i, 1) for i in a)
print(res)

Офлайн

#3 Июнь 13, 2022 10:36:53

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Количество вхождений определенной цифры (от 0 до 9) в списке чисел.

Бывает что мы вынуждены работать не только с десятичными целыми числами.
В любом случае нужно уметь выходить за рамки.
Никто не заставляет нас работать с числами как с числами
К примеру мы запросто можем перевести 19, 0х11100101, 0х1Е в стоку и обработать их как символы

 a = [1, 12, 121, 1, 10]
cnt = 0
for pos in a:
    # convert int to string
    spos = str(pos)
    if len(spos) > 1:
        for val in spos:
            if val == "1":
                cnt += 1
    else:
        if spos == "1":
            cnt += 1
print(f"Count of 1 symbols is: {cnt}")

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





Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Отредактировано ZerG (Июнь 13, 2022 10:39:03)

Офлайн

#4 Июнь 13, 2022 14:38:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9875
Репутация: +  854  -
Профиль   Отправить e-mail  

Количество вхождений определенной цифры (от 0 до 9) в списке чисел.

ZerG
Никто не заставляет нас работать с числами как с числами
Числа оптимизированы по памяти. А строки - это наборы чисел.
  
>>> import sys
>>>
>>> sys.getsizeof(1)
28
>>> sys.getsizeof('1')
50
>>> sys.getsizeof(12)
28
>>> sys.getsizeof('12')
51
>>> sys.getsizeof(123)
28
>>> sys.getsizeof('123')
52
>>> sys.getsizeof(12345123451234512345)
36
>>> sys.getsizeof('12345123451234512345')
69
>>>

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

Если же ты собрался считать цифры в числах, используя преобразование в строки, то это делается вот так
  
>>> a = [1, 12, 121, 1, 10]
>>> ''.join(map(str, a)).count('1')
6
>>>



Офлайн

#5 Июнь 13, 2022 15:09:16

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Количество вхождений определенной цифры (от 0 до 9) в списке чисел.

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

 ''.join(map(str, a)).count('1')
– ну само собой. Но мы же отвечаем
человеку та что бы он понял суть происходящего на пальцах. Человек понимающий что
тут написанно - не задал бы данный вопрос



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version