2015-03-05 6 views
0

Поэтому у меня есть список списков:Сортировка по списку списков?

НУМС = [[98, 90, 91], [46, 76, 62], [85, 90, 83], [77, 79, 81]]

и я хочу отсортировать их. Когда номер в списке (мини-списки) в

списка (основной список) ниже, чем по умолчанию я даю в качестве аргумента, функция

возвращает список с истинным или ложным для каждого список в списке.

Пример: [True, False, True, True]

Вот мой код до сих пор:

def all_passing(nums, grade = 70): 
new = [] 
for l in nums: 
    boo = True 
    for x in l: 
     if x <= grade: 
      boo == False 
      new.append(boo) 
return new 

Каждый раз, когда я запускаю код, мой вывод пустой список.

Редактировать: Я исправил некоторые вещи, и теперь я приближаюсь к своему решению, но он возвращает True или False для КАЖДОГО значения в списке списков. Как сделать так, чтобы он возвращал True или False для отдельных списков. Пример: [98, 90, 91] будет иметь значение True. [46, 76, 62] будет установлено значение False , так как x в списке ниже 70. То же самое для других списков.

Редактирование: я должен работать, я отступил строку добавления к тому же отступу второго цикла, теперь я понимаю, как это работает. Спасибо!!!

+0

Просто чтобы прояснить, это в питона, верно? – ricky3350

+0

Да, я использую python. Извини за это. – BongWater

+0

Вы должны добавить это как тег. Это сделало бы более вероятным, если бы люди прочитали ваш вопрос. – ricky3350

ответ

0

Проблемы в вашем коде:

  1. boo == False тестирует ли не освистывать равно ложь. Измените это на boo = False, чтобы установить boo в False
  2. new.append(boo) вызывается только в том случае, если x <= grade. Перемещение, что вне как if заявления и for x in l

Ваш окончательный код должен быть:

def all_passing(nums, grade = 70): 
    new = [] 
    for l in nums: 
     boo = True 
     for x in l: 
      if x <= grade: 
       boo = False 
     new.append(boo) 
    return new 
+0

Спасибо за отзыв, я приближаюсь! Не могли бы вы взглянуть на мое редактирование? Еще раз спасибо! – BongWater

+0

@BongWater Вы имеете в виду свое первое редактирование или второе редактирование? – ricky3350

+0

Я имел в виду первый, но все в порядке, я понял это. Еще раз спасибо! – BongWater

0

Кратчайший Я мог бы сделать:

def all_passing(nums, grade = 70): 
    return [ [ True if elel > grade else False for elel in el ] for el in nums ] 

Но если вы хотите, чтобы вернуть только один список (я не уверен, если я получаю то, что вы просили) с Истинным ложной dedending по результатам мини-списки, то я бы

def all_passing(nums, grade = 70): 
    ans = [ [ True if elel > grade else False for elel in el ] for el in nums ] 
    return [ False if False in el else True for el in ans ] 

Второй пример дал мне [True, False, True, True], подобное тому, что вы ожидали.

+0

Это правильное понимание списка? Можете ли вы объяснить мне, как это работает? – BongWater

+0

Я считаю, что первый бит кода - это то, что хотел OP.Внутреннее понимание списка делает это: return 'True' для каждого элемента' elel' вложенного списка 'el' -' if elel> grade' ... в противном случае возвращает 'False'. Это приведет к созданию списка «True» и «False» для каждого вложенного списка. Покрытие внешнего списка выполняет итерацию по всему вложенному списку и строит список списков «Истина» и «Ложь». ПРИМЕЧАНИЕ. Для небольших списков, таких как OP, это решение, вероятно, будет медленнее, чем вложенные петли 'for'. –

Смежные вопросы