2015-08-28 1 views
0

Я пытаюсь определить функцию, которая устранит неповторимые элементы из списка; а затем проверьте равенство во втором списке.Что такое синтаксическая ошибка? Мой код возвращает: СинтаксисError: недопустимый синтаксис (<MYCODE>, строка)?,?

def checkio(data): 
     data = [] 
     data = set(data) 
     if len(data) > 0: 
      return data 

    if __name__ == "__main__": 
     assert isinstance(checkio([1]),list) "The result must be a list" 
     assert checkio([1, 2, 3, 1, 3]) == [1, 3, 1, 3] 
     assert checkio([1, 2, 3, 4, 5]) == [] 
     assert checkio([5, 5, 5, 5, 5]) == [5, 5, 5, 5, 5] 
     assert checkio([10, 9, 10, 10, 9, 8]) == [10, 9, 10, 10, 9] 
+0

Здесь всего 12 линий! Что есть на 19-й строчке? –

+0

Вы понимаете, что первое присваивание перезаписывает аргумент 'data' –

+1

Более короткий способ написать эту функцию _checkio_:' checkio = lambda data: None'. – Matthias

ответ

5

Вы забыли d в DEF:

def checkio(data): 

и скобка:

assert isinstance(checkio([1]), "The result must be a list") # <- 

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

Вы также используете данные в качестве имени параметра, а затем установите data = [], чтобы у вас всегда был пустой список.

Это, кажется, что вы пытаетесь сделать с помощью collections.Counter Dict найти неуникальные значения:

from collections import Counter 


def checkio(data): 
    # get count of each element in data 
    cn = Counter(data) 
    # keep elements from data that are non unique 
    # iterating over data to keep the order 
    return [k for k in data if cn[k] > 1] 


if __name__ == "__main__": 
    # isinstance needs a class or type 
    assert isinstance(checkio([1]), list) 
    assert checkio([1, 2, 3, 1, 3]) == [1, 3, 1, 3] 
    assert checkio([1, 2, 3, 4, 5]) == [] 
    assert checkio([5, 5, 5, 5, 5]) == [5, 5, 5, 5, 5] 
    assert checkio([10, 9, 10, 10, 9, 8]) == [10, 9, 10, 10, 9] 

Предположив вы на самом деле хотели ваш утверждает пройти.

+0

Пожалуйста, измените первое утверждение на что-то вроде «* функции в python определены с помощью' def' * ". Это звучит немного абсурдно. –

+0

@BhargavRao На самом деле, мне нравится это как открытие для ответа. Больше ответов должно открыться таким образом. : P –

+0

@BhargavRao, был слишком занят, фиксируя все ошибки, синтаксис и логически –

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