2014-11-14 3 views
1

Профессор представил новый способ написания кода.Ошибка синтаксиса Python в понимании списка?

x=[1,2,3,4,5,6,7,8,9] 
y=[i<6 , for i in x] 
print(y) 

Я ожидаю следующий вывод

True, True, True, True, True, False, False, False, False 

Есть ли ошибка синтаксиса в у заявления? Моя программа выделяет часть.

+7

вы не должны иметь запятую: 'у = [I <6 для я в х]' – Thibaut

ответ

1

Вы должны написать как:

x=[1,2,3,4,5,6,7,8,9] 
    y=[i<6 for i in x] 
    print y 

Ваш код хорошо, но удалить , из списка.

выход:

[True, True, True, True, True, False, False, False, False] 
3

Вы не используете , в списке понимание. Это прекрасно работает:

x = [1, 2, 3, 4, 5, 6, 7, 8, 9] 

y = [i<6 for i in x] 

print(y) 

Возвращает [True, True, True, True, True, False, False, False, False]

Что ваш профессор учит вас list comprehension. Я люблю их. Кратко писать.

В качестве альтернативы, вы могли бы написать его так, что путь длиннее:

z = [] 

for i in x: 
    if i < 6: 
     z.append(True) 
    else: 
     z.append(False) 

print(z) 

вернуть бы [True, True, True, True, True, False, False, False, False]

Кстати, приведенный выше код может также быть написаны с стенографии, если еще синтаксис:

z = [] 
    for i in x: 
     z.append(True) if i < 6 else z.append(False) 
    return z 

В любом случае, вот более полное решение с модульным тестированием для вашего perus и др.

import unittest 

def so_26923986(x): 

    y = [i < 6 for i in x] 
    return y 

def so_26923986_1(x): 

    z = [] 
    for i in x: 
     z.append(True) if i < 6 else z.append(False) 
    return z 

Unit Test

# Unit Test 
class Test(unittest.TestCase): 
    def testcase(self): 
     self.assertEqual(so_26923986([1, 2, 3, 4, 5, 6, 7, 8, 9]), [True, True, True, True, True, False, False, False, False]) 
     self.assertEqual(so_26923986_1([1, 2, 3, 4, 5, 6, 7, 8, 9]), [True, True, True, True, True, False, False, False, False]) 

     self.assertEqual(so_26923986([1, 2, 3]), [True, True, True]) 
     self.assertEqual(so_26923986_1([1, 2, 3]), [True, True, True]) 

     self.assertEqual(so_26923986([1, 2, 7, 10, 3, 8]), [True, True, False, False, True, False]) 
     self.assertEqual(so_26923986_1([1, 2, 7, 10, 3, 8]), [True, True, False, False, True, False]) 

unittest.main() 

Тест Передача

Ran 1 test in 0.000s 

OK