用Python编写程序的最短方法

时间:2014-08-15 22:17:51

标签: python

我想知道编写以下内容的最短路径

 res=[]
 for x in xrange(1,4):
     if x in [1,3]:
            res.append(1)
     else:
           res.append(0)

我的实际问题是将[4,6]之类的输入转换为[0,0,0,1,0,1],例如我使用xrange(1,7)

6 个答案:

答案 0 :(得分:4)

使用列表理解:

res = [int(x in (1, 3)) for x in xrange(1, 4)]

利用了boolint的子类这一事实。

当然还有更短的时间:

res = [1, 0, 1]

答案 1 :(得分:2)

尽可能短。

res = [1, 0, 1]

答案 2 :(得分:2)

我猜你正在寻找这样的东西:

print [int(x in [4, 6]) for x in range(1, 7)]

输出:

[0, 0, 0, 1, 0, 1]

答案 3 :(得分:2)

以下是我将如何操作,内置doctests:

def bit_array(series, matches):
    """
    >>> bit_array(range(1, 7), (4, 6))
    [0, 0, 0, 1, 0, 1]
    >>> bit_array(range(1, 4), (1, 3))
    [1, 0, 1]
    """
    return [int(x in set(matches)) for x in series]

if __name__ == '__main__':
    from doctest import testmod
    testmod()

我不认为这是最短的,因为它是一个带参数的函数,并且具有单元测试基础设施,但我认为它在表示其目的方面是最清晰的。并且一旦你确信它有效,你总是可以内联函数并丢弃测试。

答案 4 :(得分:0)

这是另一种方式:

>>> [0 if i % 2 == 0 else 1 for i in range(1, 4)]
[1, 0, 1]

答案 5 :(得分:0)

在那个特例中:

>>> map(int, '101')
[1, 0, 1]

根据您的评论:

>>> map(lambda e: int(e in [4,6]), xrange(1,7))
[0, 0, 0, 1, 0, 1]