Проверьте, есть ли порядок возрастания в списке списка целых чисел (Python)

Учитывая список списков, как это:

[[2, 7], [1, 4], [0, 5, 6]]

Как я могу проверить, есть ли в этом списке допустимый порядок возрастания. Например, это будет True, потому что я могу сформировать такой порядок:

[2,4,5]

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

редактировать: Это то, что я сейчас пробовал, но он не будет масштабироваться до больших списков.

allNumbers = [[2, 7], [1, 4], [0, 5, 6]]

smallest = min(allNumbers[0])
largest = max(allNumbers[2])
for n in allNumbers[1]:
    if smallest < n < largest:
        return True

Добро пожаловать в СО. Можете ли вы также опубликовать то, что вы пробовали?

0xc0de 24.12.2020 07:27

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

roger 24.12.2020 07:36

Что вы на самом деле имеете в виду? Что считается «действительным порядком возрастания в этом списке»? Не понятно, о чем вы спрашиваете.

user2357112 24.12.2020 07:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
255
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

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

a = [[2, 7], [1, 4], [0, 5, 6]]
current = min(a[0])

possible = True
for l in a[1:]:
    possible = False
    for i in l:
        if i >= current:
            possible = True
            current = i
            break
    if not possible:
        break
print(possible) #returns True    

Рад помочь. :)

Albin Paul 24.12.2020 07:56

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

from math import inf

def ascend(xss):
    smallest = -inf
    path = []
    for xs in xss:
        smallest = min(x for x in xs if x > smallest)
        path.append(smallest)
    return path
>>> ascend([[2, 7], [1, 4], [0, 5, 6]])
[2, 4, 5]
>>> ascend([[2, 7], [1, 4], [0, 5, 6], [0]])
Traceback (most recent call last):
 ...
ValueError: min() arg is an empty sequence

Вот мой ответ.

def tell_if_the_lists_are_in_order(lists):
    min_first = min(lists[0])  # for empty input, return True.
    prev_min = min_first
    for sublist in lists[1:]:
        min_num = min(sublist)
        max_num = max(sublist)
        if max_num <= prev_min:
            return False
        prev_min = min(x for x in sublist if x > prev_min)
    return True

Вот мой ответ:

def IsAscending(list):
    ascend = True
    int a;
    for i in list:
        if i == 0:
            a = list[i]
        else:
            if list[i] >= a:

                a = list[i]
            else:
                ascend = False
    return ascend

Вот окончательное решение, которое я получил

def validList(chLocations):
     ascendingOrder = []

     smallest = min(chLocations[0])
     maximum = max(chLocations[-1])

     ascendingOrder.append(smallest)
     chLocations = chLocations[1:]

     for i in range(len(chLocations)-1):
         for number in chLocations[i]:
             if number > max(ascendingOrder):
                 ascendingOrder.append(number)
                 break
     ascendingOrder.append(maximum)

     if sorted(ascendingOrder) == ascendingOrder:
          return True
     else:
          return False
>>> validList([[2, 7], [1, 4], [0, 5, 6]]) 
True
>>> validList([[1, 3], [7], [2]])
False

Объяснение:

[[2, 7], [1, 4], [0, 5, 6]] --> [2,4,5] == True
[[1, 3], [7], [2]] --> [1,7,2] == False

Итак, для [[2], [1], [3]] вы хотите True? Потому что это то, что говорит ваше решение (после того, как вы добавите недостающее :).

superb rain 24.12.2020 08:38

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