Сравнение элементов списков и сортировка списков
Есть список списков arr. В каждом из вложенных списков есть n элементов. Если в списке второй элемент больше, чем первый, третий больше, чем второй, и так далее, его нужно добавить в отдельный список. Я попытался сделать это с помощью булевой переменной, но не получилось. Вот код:
arr = [[6, 8], [3, 8, 3], [3, 4, 5]]
b = []
for i in range(0, len(arr):
g = False
for h in range(0, len(arr[i] - 1)):
if g == True and h == len(arr[i]) - 2):
b.append()
if arr[i[h]] < arr[i[h+1]]:
g = True
print(b)
Ответы (2 шт):
Автор решения: NykSu
→ Ссылка
Как то так:
arr = [[6, 8], [3, 8, 3], [3, 4, 5]]
b = []
for mas in arr:
is_ordered = True
for i in range(1, len(mas)):
if mas[i] < mas[i-1]: # заменить условие < на условие <=
is_ordered = False
break
is_ordered = is_ordered and (mas[i] > mas[i-1]) # убрать эту строку!
if is_ordered:
b.append(mas)
print(b)
Автор решения: Михаил Муругов
→ Ссылка
def is_sorted(sequence) -> bool: # Создаём функцию, определяющую, отсортирована ли последовательность
it = iter(sequence) # Создаём итератор по последовательности
try:
lhs = next(it) # Получаем первый элемент последовательности
except StopIteration: # Если исходная последовательность пустая
raise ValueError('Empty sequence') # Возбуждаем соответствующее исключение
for rhs in it: # Перебираем оставшиеся элементы последовательности
if lhs < rhs: # Если очередной элемент больше предыдущего
lhs = rhs # Запоминаем его для дальнейшего сравнения уже с ним
else:
return False # Иначе возвращаем False - последовательность не отсортирована
return True # Если return False не сработал, значит, последовательность отсортирована, возвращаем True
arr = [[6, 8], [3, 8, 3], [3, 4, 5]] # Входные данные
# Фильтруем arr по критерию "отсортирован",
# результат приводим к списку и сохраняем в другую переменную
b = list(filter(is_sorted, arr))