Как нарезать список (или создать подсписки) на основе элементов в исходном списке, которые отличаются заданным значением - PullRequest
0 голосов
/ 16 октября 2018

Я впервые задаю вопрос здесь, поэтому, пожалуйста, не жарьте меня слишком сильно, так как я пытаюсь разобраться в этом.

Я работаю над некоторым кодом, используя Python 3. Итак, в моем коде я генерирую список.Ради конкретности, предположим, что я работаю со следующим списком:

a = [3344, 3354, 3364, 3364, 3374, 3374, 3384, 3384, 3394, 3394, 3404, 3404, 3414, 3414, 3424, 3434]

Я бы хотел отсортировать этот список на следующие подсписки:

sub1 = [3344, 3354, 3364, 3374]
sub2 = [3364, 3374, 3384, 3394]
sub3 = [3384, 3394, 3404, 3414]
sub4 = [3404, 3414, 3424, 3434]

Итак, я хотел бычтобы отсортировать исходный список в подсписки на основе элементов, которые отличаются по известному значению, в данном случае 10.

Я не могу использовать нарезку по индексу и пока не смог реализовать лямбду любого видафункция для достижения этой цели.Я искал глубины переполнения стека и не нашел ничего особенно полезного.

Спасибо за помощь.

Обновление:

Я хотел бы добавить еще немного информации, чтобы устранить любую путаницу, связанную с отсутствием конкретики в моем языке.Цель состоит в том, чтобы создать подсписки с четырьмя элементами из исходного списка, причем элементы подсписка отличаются на значение 10.

Чтобы лучше объяснить, что я пытаюсь сделать здесь, я предоставлю второй списоки требуемые выходные списки.

b = [3384, 3404, 3344, 3394, 3374, 3414, 3354, 3404, 3384, 3424, 3364, 3414, 3394, 3364, 3434, 3374]

Требуемый вывод будет выглядеть примерно так:

sublist1 = [3344, 3354, 3364, 3374]
sublist2 = [3364, 3374, 3384, 3394]
sublist3 = [3384, 3394, 3404, 3414]
sublist4 = [3404, 3414, 3424, 3434]

Мне нужно иметь возможность генерировать этот вывод, так как эти списки будут использоваться каквходные значения для различных функций позже ... Захват вырожденных значений является обязательным.

Надеюсь, это прояснит ситуацию!

Ответы [ 2 ]

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

Используйте sorted с set и петлей

b = [3384, 3404, 3344, 3394, 3374, 3414, 3354, 3404, 3384, 3424, 3364, 3414, 3394, 3364, 3434, 3374]

lst = sorted(set(b))
for i in range(4):
    print(lst[i*2:i*2+4])
[3344, 3354, 3364, 3374]
[3364, 3374, 3384, 3394]
[3384, 3394, 3404, 3414]
[3404, 3414, 3424, 3434]
0 голосов
/ 16 октября 2018

Вы можете использовать вложенный цикл for, который добавляет элемент в a к существующему подсписку, длина которого меньше 4, а последний элемент на 10 меньше, чем элемент, или иным образом создать новый подсписок с элементом:

l = []
for i in a:
    for s in l:
        if len(l) < 4 and s[-1] + 10 == i:
            s.append(i)
            break
    else:
        l.append([i])

Учитывая ваш пример ввода, l станет:

[
    [3344, 3354, 3364, 3374],
    [3364, 3374, 3384, 3394],
    [3384, 3394, 3404, 3414],
    [3404, 3414, 3424, 3434]
]

Обратите внимание, что ваш ожидаемый вывод неверен, потому что элементы в вашем вводе a могут быть отсортированы вдва списка, не нарушая правила всех смежных пунктов, отличающихся на 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...