@Smeilz1
За любое развитие

Как сделать сравнение ряда цифр на Python?

Недавно изучаю Python .
Подскажите как выбрать из ряда цифр 32854. (Цифр строго 5)
1) ответить на вопрос есть ли в ряде 4 цифры , идущие подряд : да или нет .(ряд строго только из 4 цифр)
Если 3 цифры и ряд есть- это ответ нет.
2) вывести эти цифры из такого ряда .
В моем случае :
1) да
2) 2345
Заранее спасибо .
Upd. Разберу код одного из решений.
Сам код.
--------------------------------------
x = "32854"
y = sorted(list(x))
z = y[0]
a = [z]

for i in y[1:]:
  if int(i) - 1 == int(z):
    z = i
    a.append(i)

if len(a) > 1:
  print('Да')
  print(''.join(a))
else:
  print('Нет')
-------------------------------------------------
Мой разбор кода.
---------------------------
y = sorted(list(x)) Создаем сортированный список по возрастанию
z = y[0] Выводим первый элемент списка по возрастанию
a = [z] Создаем список состоящий из одного элемента z
for i in y[1:]: Поиск начиная со второго элемента
if int(i) - 1 == int(z): Если в списке второй элемент минус 1 =первому элементу, то:
z = i Первый элемент сортированного списка = значению i, (i=значение второго элемента списка y)
a.append(i) Присоединяем в списке a к первому элементу сортированного списка элемент равный i

Теперь тоже самое в числах для примера строки "32854"
y = sorted(list(x)) - 23458
z = y[0] - 2
a = [z] 2
for i in y[1:]: Поиск в списке 23458 начиная с тройки
if int(i) - 1 == int(z): Если 3-1 =2, то
z = i - z=3
a.append(i) 2,3
-------------------------------------
Подскажите все ли верно я понимаю?
  • Вопрос задан
  • 4636 просмотров
Решения вопроса 2
longclaps
@longclaps
s = "3312123989"

l = [' '] * 10
for c in s:
    l[ord(c) - ord('0')] = c
l = [d for d in ''.join(l).split() if len(d) == 4]
print("yes\n" + l[0] if l else "no")
Ответ написан
nightvich
@nightvich
ITman
Предыдущий вариант не отвечает на 2 вопрос.

x = "32854"
y = sorted(list(x))
z = y[0]
a = [z]

for i in y[1:]:
	if int(i) - 1 == int(z):
		z = i
		a.append(i)

if len(a) > 1:
	print('Да')
	print(''.join(a))
else:
	print('Нет')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Upd... Убрал лямбду.. Исправился. Спасибо longclaps
Анально, в две строки (нет, фактически в одну)...

Берем отсортированный массив со второго элемента, и редусим его в выходной массив из первого элемента...

s = sorted(list("32854"))
def f(res, x):
   if int(x) - int(res[-1]) == 1:
     return res+[x]
   elif len(res) > 1:
     return res
   else:
     return [x]
ret = reduce(f, s[1:], [s[0]])

# напечатаем резалт
if len(ret) > 1:
   print('Yes', ret)

### ('Yes', ['2', '3', '4', '5'])
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы