Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 11, 2016 12:11:20

gratiani
Зарегистрирован: 2016-05-30
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Как можно сгенерировать список с определенными числами

Например 1 и 2 до четырехзначных значений.

1, 2, 11, 22, 12, 21, 111, 222, 112 и т.д.

Отредактировано gratiani (Авг. 11, 2016 12:11:42)

Офлайн

#2 Авг. 11, 2016 12:37:33

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Как можно сгенерировать список с определенными числами

Посмотрите на модуль itertools. Первое, что пришло на ум:

 numbers = [1,2,1,2]
for count in range(1,5):
    print set(list(itertools.combinations_with_replacement(numbers, count)))

Проверьте, все ли комбинации присутствуют



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#3 Авг. 11, 2016 14:08:54

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

Как можно сгенерировать список с определенными числами

  
>>> import itertools
>>> 
>>> it = (itertools.product('12', repeat=i) for i in range(1, 5))
>>> out = list(map(''.join, itertools.chain.from_iterable(it)))
>>> out
['1', '2', '11', '12', '21', '22', '111', '112', '121', '122', '211', '212', '221', '222', '1111', '1112', '1121', '1122', '1211', '1212', '1221', '1222', '2111', '2112', '2121', '2122', '2211', '2212', '2221', '2222']
>>>



Офлайн

#4 Авг. 11, 2016 15:18:00

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Как можно сгенерировать список с определенными числами

 def countanybase(digits, number_):
    number = list(number_)
    for i, d in list(enumerate(number))[-1::-1]:
        if d != digits[-1]:
            number[i] = digits[digits.find(d) + 1]
            number[i + 1:] = [digits[0]] * (len(number) - i - 1)
            break
    else:
        number = [digits[1]] + [digits[0]] * len(number)
    return ''.join(number)
number = '1'
for i in range(15):
    number = countanybase('12', number)
    print(number)

Офлайн

#5 Авг. 11, 2016 18:15:54

Stepan_M
Зарегистрирован: 2016-07-20
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Как можно сгенерировать список с определенными числами

Никаких itertools'ов, set'ов и переводов из строк в число. Только математика, только хардкор!

 NUMBERS = [5, 3, 8] # определенные числа
N = 3 # максимальная разрядность
x = NUMBERS[:]
for i in range(N - 1):
    x += [j * 10 + k for j in x[-len(NUMBERS * i):] for k in NUMBERS]
print(x)

Отредактировано Stepan_M (Авг. 11, 2016 18:47:12)

Офлайн

#6 Авг. 11, 2016 18:58:14

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Как можно сгенерировать список с определенными числами

Stepan_M
Никаких itertools'ов, set'ов
при заданном условии Например 1 и 2 до четырехзначных значений результат теряет 1111,1112,1122,1222

Офлайн

#7 Авг. 11, 2016 19:09:55

Stepan_M
Зарегистрирован: 2016-07-20
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Как можно сгенерировать список с определенными числами

marvellik
при заданном условии Например 1 и 2 до четырехзначных значений результат теряет 1111,1112,1122,1222
Точно. Попробую поправить…
 NUMBERS = [1, 2, 3] # определенные числа
N = 5 # максимальная разрядность
x = NUMBERS[:]
for i in range(1, N):
    x += [j * 10 + k for j in x[-len(NUMBERS) ** i:] for k in NUMBERS]
print(x)
Так?

Отредактировано Stepan_M (Авг. 11, 2016 19:23:25)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version