Всякий раз, когда я использую перестановки, мне нужно создать список перестановок, потому что он возвращает объект itertools.permutations в 0x0190A5D0. Затем, после создания списка, мне нужно объединить строки в каждом списке, чтобы у меня была перестановка, которую я хотел первоначально. Если это число, я должен снова сделать их целыми.объединение строк n длины в списке python
Две части вопрос:
1) Есть ли более простой способ сделать перестановку и создать список номеров?
2) Ниже я создал перестановку числа с 5 цифрами. Однако, когда у меня есть «12345», я хочу, чтобы пользователь вводил свой номер. Таким образом, строка форматирования b = ['s% s% s ...] должна быть n% s и n x. Кто-нибудь знает, как это сделать?
(FYI моя программа пытается найти следующий наибольшее число с тех же цифр, заданных пользовательского ввода так +12345 Следующий по величине является 12354)
Оба вопроса были даны ответы ниже смотрите, пожалуйста, как ответы. Благодаря!!!
def nexthighest():
from itertools import permutations
numb = str(12345)
a = list(permutations(numb))
b = ['%s%s%s%s%s' % xxxxx for xxxxx in a] #<-- this is where the n length problem occurs
c = list(map(int,b))
for i in c:
if i >12345:
print(i)
break
Вашего основного алгоритма нарушаются - например, если вы используете «897» в качестве входа, то первой перестановка, которую вы обнаружите, больше, чем я, будет 987, что * не * следующее наибольшее число с одинаковыми цифрами (978). Один из способов исправить это можно путем замены 'list (map (int, b))' на 'sorted (map (int, b))'. Лучшим способом было бы сделать 'numb = sorted (str (input_value)'. –
Чтобы решить вашу проблему, вам не нужны перестановки _all_, только одна - а именно следующая в лексикографическом порядке. См. [Здесь] (http: /en.wikipedia.org/wiki/Permutation#Generation_in_lexicographic_order) для алгоритма – georg