我想知道编写以下内容的最短路径
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)
答案 0 :(得分:4)
使用列表理解:
res = [int(x in (1, 3)) for x in xrange(1, 4)]
利用了bool
是int
的子类这一事实。
当然还有更短的时间:
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]