2015-10-19 4 views
3

Я создаю логическую функцию, которая проверяет, если каждый элемент в моем списке больше 1 и меньше 6. Также список является положительным целым числом, а не отрицательным, 0, строкой или чем-либо еще.Список с несколькими условиями

Чувствую, что я пробовал почти все и не мог найти решение. Это то, что я имею в наличии сейчас.

def checkList(aList): 

    for i in aList: 
     if i < 1: 
      return False 
     elif i > 6: 
      return False 
     else: 
      return True 
+0

Это не очень понятно, что вы пытаетесь сделать. Вы пытаетесь проверить только одно значение в пределах 1 и 6, или все значения должны быть между 1 и 6? – idjaw

+0

Извините, все значения в списке. –

+0

@CaseyJones Пожалуйста, отредактируйте свой вопрос, чтобы уточнить это. Код, который у вас есть, обработает только первый элемент в списке, потому что вы использовали оператор 'return'. – dsh

ответ

1

Это будет работать для вас

def check_sequence(sequence, low, high): 
    if all(isinstance(i, int) for i in sequence): 
     return all(low < i < high for i in sequence) 
    else: 
     return False 
print(check_sequence([2, 5, 4, 3, 3], 1, 6)) 
>> True 

Важным понятием здесь является low < i < high. В Python вы можете указать диапазон значений, между которыми должна находиться переменная.

2

одно выражение генератора с использованием allisinstance(i, int), чтобы проверить, каждый элемент представляет собой ИНТ и 1 <= i <= 6, чтобы убедиться, что каждый ИНТ находится в диапазоне 1-6:

def checkList(aList): 
    return all(isinstance(i, int) and 1 < i < 6 for i in aList) 

all будет короткое замыкание, и возвращать значение False для любое не int или любое значение меньше 1 или более 5 или возвращает True, если все элементы являются int и в диапазоне 1-6.

В своем коде вы проверяете для if i < 1 и elif i > 6, когда вы говорите, вы хотите проверить , если каждый элемент в моем списке больше 1 и меньше, чем 6 поэтому было бы if i < 2 и elif i > 5 возвращение False, 1 является не менее 1 и 6 больше 5, поэтому исправить вашу собственную логику и проверить на ints.

def checkList(aList): 
    for i in aList: 
     if not isinstance(i, int): 
      return False 
     if i < 2: 
      return False 
     if i > 5: 
      return False 
    return True # outside loop 

Вы должны переместить возвращающие вне цикла, просто потому, что один является ИНТ между 1 - 6 не означает, что все они являются.

Что можно переписать в виде:

def checkList(aList): 
    for i in aList: 
     if not isinstance(i, int): 
      return False 
     if 2 > i > 5: 
      return False    
    return True 
3

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

def check_list(li): 
    return all((type(i) == int and 1 < i < 6 for i in li)) 
+0

Вы также можете удалить внутренние парады, если хотите;) –

0

Вы могли бы просто использовать filter он бы что-то вроде этого

filtered = filter(seq, lambda x: 1 < int(x) < 6) 

Это возвращает отфильтрованный список, содержащий только те элементы, которые были от 1 до 6. Затем вы можете проверить, если список имеет чтобы увидеть, удалено ли что-либо.

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

def checkList(seq): 
    filtered = filter(seq, lambda x: 1 < int(x) < 6) 
    return len(filteted) == len(seq) 
Смежные вопросы