Найти - Пользователи
Полная версия: Поиск необходимых чисел в списке
Начало » Python для новичков » Поиск необходимых чисел в списке
1
zokasi
Существует список из шестизначных чисел. Мне нужно посчитать вероятность нахождения в списке чисел, в которых есть ТОЛЬКО одна цифра 8 и ТОЛЬКО две цифры 2. Как я могу это сделать? Моя идея заключалась в том, что из числа “вытаскиваются” с помощью регулярных выражений 8 и две 2, склеиваются в один список и сравниваются с шаблоном, но это не работает (итог всегда 0, т.е. k = 0). Возможно, я неправильно понимаю, как работают некоторые элементы или не вижу ошибки?

 import random
import re
k = 0
new_list = list()
string = [8, 2, 2]
n = 1000
for i in range(0, n):
    new_list.append(random.randint(100000, 999999))
for i in range(0, n):
    if (re.findall(r'8{1}', str(new_list[i]))) + (re.findall(r'2{2}', str(new_list[i]))) == string:
        k = k+1
print('Вероятность равна: ', "%.4f" % (k/n))
marvellik
zokasi
которых есть ТОЛЬКО одна цифра 8 и ТОЛЬКО две цифры 2

zokasi
Моя идея заключалась в том, что из числа “вытаскиваются” с помощью регулярных выражений 8 и две 2,
то есть если в числе больше чем 1 восьмерка и больше чем 2 двойки то вы считаете это число истинным для условия так как вы вытащили из него то что вам требуется а остальное по барабану? тут вообще не реально сравнить строку с списком
 str(new_list[i]))) == string:
 from random import randint
def fun(string):
    lst = []
    for i in str(randint(100000, 999999)):
        if i in string:
            lst.append(i)
    return string == ''.join(sorted(lst))
        
string = '228'
n = 1000
k = sum([fun(string) for i in range(n)])
print('Вероятность равна: ', "%.4f" % (k/n))


zokasi
Спасибо. Вы действительно правы, сравнение было совершенно глупым. Была также попытка просто подсчитывать в каждом числе 2 и 8, и если две 2 и одна 8, то счетчик +1, но к правильному результату подобраться не удалось.
PEHDOM
zokasi
Была также попытка просто подсчитывать в каждом числе 2 и 8, и если две 2 и одна 8, то счетчик +1, но к правильному результату подобраться не удалось.
както так?
 ...
for i in new_list:
    res = re.findall(r'8|2', str(i))
    if res.count('8') == 1 and res.count('2') == 2:
        k+=1
...
marvellik
zokasi
Была также попытка просто подсчитывать в каждом числе 2 и 8, и если две 2 и одна 8, то счетчик +1
нормальная идея но вы просто неверно пытались, можно подсчитывать в строке
 >>> number = '56782334200'
>>> print(number.count('8') == 1 and number.count('2') == 2)
True
>>>
а можно раскладывать число на цифры и считать
 number = 56782334200
count_8 = 0
count_2 = 0
while number:
    numeral = number % 10
    if numeral == 8:
        count_8 += 1
    elif numeral == 2:
        count_2 += 1
    number //= 10
print(count_8,count_2)
или так
 number = 56782334200
lst = []
string = [8, 2, 2]
while number:
    numeral = number % 10
    if numeral == 8 or numeral == 2:
        lst.append(numeral)
    number //= 10
print(sorted(string) == sorted(lst))
тут вопрос по времени что быстрее работает
zokasi
Большое Вам
marvellik
нормальная идея но вы просто неверно пытались, можно подсчитывать в строке
спасибо, уже всё понятно
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB