2016-03-15 5 views
0

Я хотел бы создать функцию, которая возвращает элементы списка на нечетные позиции или отрицательные элементы списка.Функция Python с двойным условием

Мое решение работает с первым утверждением, но второе генерирует AssertionError, потому что возвращает [-1, -2, 1] вместо [-1, -2]. Какие-либо предложения?

def solution(input): 
    output = [] 
    for item in input: 
    if item < 0: 
     output.append(item) 
    elif not item % 2 == 0: 
     output.append(item) 
    return output 

assert solution([0,1,2,3,4,5]) == [1,3,5] 
assert solution([1,-1,2,-2]) == [-1,-2] 
+0

почему бы ей не быть '[-1, -2,1]'? 1 нечетно ... –

+0

@JoranBeasley Предполагается, что числа, которые либо находятся в нечетных позициях, либо отрицательны, поэтому '[-1, -2, 1]' неверно – DaveBensonPhillips

ответ

5

Вы хотите цифры на нечетных позициях, но ваш % проверка проверяет фактические значения в списке, а не их позиции.

Попробуйте использовать enumerate, чтобы получить индекс наряду с величиной, как вы итерацию по списку:

def solution(input): 
    output = [] 
    for ix, item in enumerate(input): 
    if item < 0 or ix % 2 != 0: 
     output.append(item) 
    return output 
0

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

if any(i < 0 for i in output): 
      return [i for i in output if i < 0] 

, так как он проверяет, существует ли отрицательный результат, и возвращают только те, если это так. Однако ответ от HumphreyTriscuit - лучшее решение с моей точки зрения.

0

Одна строка для определения функции решения:

def solution(input): 
    return [input[pos] for pos in range(len(input)) if not pos %2 == 0 or input[pos] < 0] 

print solution([0,1,2,3,4,5,7]) 
print solution([1,-1,2,-2, -3]) 

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

  • Нет связанных вопросов^_^