Форум сайта python.su
Всем привет!
Есть список 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)
Офлайн
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)
Офлайн
Бывает что мы вынуждены работать не только с десятичными целыми числами.
В любом случае нужно уметь выходить за рамки.
Никто не заставляет нас работать с числами как с числами
К примеру мы запросто можем перевести 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}")
Отредактировано ZerG (Июнь 13, 2022 10:39:03)
Офлайн
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 >>>
Офлайн
Разумеется работать с числами как числами это правильный вариант.
Но на примере конкретно данной задачи, как я и написал выше, мы можем
отойти от канонов что бы показать возможность не ити всегда напролом.
''.join(map(str, a)).count('1')
Офлайн