извлекать числа последовательно: python - PullRequest
0 голосов
/ 13 октября 2018

Я начинающий программист.Я пытаюсь извлечь из списка только последовательные числа. Например,

, мой список:

s = [2, 4, 6, 7, 8, 9, 10, 13, 14, 15]

. Из этого списка мне нужны только последовательные числа:

6,7,8,9,10, 13,14,15

Итак, у меня есть следующий код, но он не работает.

s = [2, 4, 6, 7, 8, 9, 10, 13, 14, 15]


for i in s:
    if s[i+1] - s[i] == 1:
        print(s[i])

Не могли бы вы дать мне идею?Спасибо.

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Я только что решил этот вопрос.Спасибо всем за комментарии.

s = [2, 4, 6, 7, 8, 9, 10, 13, 14, 15]
a = []
for i in range(len(s)-1):
    if s[i] - s[i+1] == -1:
        a. append(s[i])
        a. append(s[i+1])

print(set(a))
0 голосов
/ 13 октября 2018

Я бы перебрал list s, сохраняя результаты в set res, и в конце, если я хочу, чтобы результаты отсортированы , я бы применил sorted function on res, чтобы получить вывод.

Вот некоторый код.

s= [2, 4, 6, 7, 8, 9, 10, 13, 14, 15]
res = set()
for i, num in enumerate(s[:-1]):
    if num+1 == s[i+1]:
        res = res.union({num} )           
        res = res.union({s[i+1]})
print(sorted(res))
print(res)

И вывод:

>>> [6, 7, 8, 9, 10, 13, 14, 15]
    {6, 7, 8, 9, 10, 13, 14, 15}

Имейте в виду, что set s НЕ отсортированы дажеесли они кажутся отсортированными.Это потому, что set s НЕ поддерживает index es.Поэтому, если вы хотите, чтобы результаты сортировались, обязательно используйте функцию sorted, чтобы быть в безопасности.

0 голосов
/ 13 октября 2018

Вы перебираете элементы списка вместо индексов этих элементов.Чтобы перебрать индексы, используйте:

if s[1] - s[0] == 1:
    print(s[0])
for i in range(1,len(s)):
    if s[i] - s[i-1] == 1: 
        print(s[i])
...