Извлечь списки из кортежа с условием

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

Пример:

  • Ввод: (4,2,2,3,5,6,0,0,2)
  • Желаемый результат: [[4],[2,2,3,5,6],[0,0,2]]

Я пробовал следующее:

E=tuple([random.randint(0,10) for x in range(10)])
Res=[E[x:y] for x in range(0,len(E)) for y in range(x+1,len(E)) if (y>x)]

твой вопрос не ясен

God Is One 11.11.2022 09:53

Извлеките N чисел внутри списка [], которые находятся в порядке возрастания из кортежа, используя понимание списка.

BouhaaCode 11.11.2022 09:57

Почему вы должны использовать понимание списка?

Pingu 11.11.2022 09:59
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
0
3
73
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вот один из возможных способов сделать это. Вы можете использовать np.split вместе с random.sample, чтобы получить случайные числа, которые используются в качестве индекса для разделения.

import random
import numpy as np

lst = [4,2,2,3,5,6,0,0,2]
number_of_splits = 4
random.seed(42)
random_splits = sorted(random.sample(set(range(1,len(lst)-1)),number_of_splits-1))
print(random_splits)

result = [list(elem) for elem in np.split(lst, random_splits)]
print(result)
[1, 6, 7]
[[4], [2, 2, 3, 5, 6], [0], [0, 2]]

Вероятно, проще сделать это без понимания списка, то есть с помощью простого цикла, подобного этому:

from random import randint as RANDINT

t = 4, 2, 2, 3, 5, 6, 0, 0, 2
out = []
offset = 0
while offset < len(t):
    e = RANDINT(1, len(t)+1-offset)
    out.append(list(t[offset:offset+e]))
    offset += e
print(out)

Вывод (пример):

[[4], [2, 2], [3], [5, 6, 0, 0], [2]]

Мы можем использовать срез, чтобы отметить начало и конец подсписков.

t=(4,2,2,3,5,6,0,0,2)

split_list=[0]+[x for x in range(len(t)) if t[x]<t[x-1]]
split_list_end=[x for x in range(len(t)) if t[x]<t[x-1]]
split_list_end.append(len(t))

[list(t[x]) for x in [slice(x[0],x[1]) for x in list(zip(split_list,split_list_end))]]
Ответ принят как подходящий

Здесь простая логика для создания нового списка уже с кортежем первого элемента. а затем перебрать кортеж, и если его текущий элемент меньше последнего элемента или нет, если он меньше, то append element as a list или append element into the last list.

Код:

import random
E=tuple([random.randint(0,10) for x in range(10)]) 
E

ls=[[E[0]]]
[ls.append([E[e]])  if E[e]<E[e-1] else ls[len(ls)-1].append(E[e]) for e in range(1, len(E)) ]
ls

ИЛИ Без предварительного определения первого значения

from itertools import pairwise
l=[[]]
[l[len(l)-1].append(y) if x-y < 0 else l.append([y]) for (x, y) in pairwise([e for e in (0,)+E])] ##Insert the dump 0 at first position
l

Ввод: (7, 10, 7, 2, 3, 7, 4, 3, 5, 10) Выход: [[7, 10], [7], [2, 3, 7], [4], [3, 5, 10]]

Ввод: (0, 3, 4, 3, 0, 7, 0, 0, 2, 3) Выход: [[0, 3, 4], [3], [0, 7], [0, 0, 2, 3]]

Другие вопросы по теме