列表理解中的Python语法错误?

时间:2014-11-14 06:09:50

标签: python list-comprehension

教授介绍了一种编写代码的新方法。

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

y语句中是否存在语法错误?我的节目突出了部分内容。

2 个答案:

答案 0 :(得分: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]

顺便说一句,上面的代码可以用速记写if else语法:

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

无论如何,这是一个更完整的单元测试解决方案,供您细读。

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
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

答案 1 :(得分: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]