对Python FOR循环的疑问
我对Python中的FOR循环有一些疑问:
这段代码运行得很好:
a, b, c, d, e, f, g, h = range(8)
_ = float('inf')
# a b c d e f g h
W = [
[0,2,1,3,9,4,_,_], # a
[_,0,4,_,3,_,_,_], # b
[_,_,0,8,_,_,_,_], # c
[_,_,_,0,7,_,_,_], # d
[_,_,_,_,0,5,_,_], # e
[_,_,2,_,_,0,2,2], # f
[_,_,_,_,_,1,0,6], # g
[_,_,_,_,_,9,8,0]] # h
sum(1 for w in W[a] if w < _) - 1 # Degree
我的问题是:
这个“FOR x IN y IF x < 10”只能在SUM里面使用吗?
我试过这个,但它不工作:
a, b, c, d, e, f, g, h = range(8)
_ = float('inf')
# a b c d e f g h
W = [
[0,2,1,3,9,4,_,_], # a
[_,0,4,_,3,_,_,_], # b
[_,_,0,8,_,_,_,_], # c
[_,_,_,0,7,_,_,_], # d
[_,_,_,_,0,5,_,_], # e
[_,_,2,_,_,0,2,2], # f
[_,_,_,_,_,1,0,6], # g
[_,_,_,_,_,9,8,0]] # h
for w in W[a] if w < _:
print 1
祝好,
2 个回答
3
据我所知,在for语句中,if条件只允许出现在列表推导式或者生成器表达式里。想了解更多,可以查看这个链接:http://docs.python.org/reference/compound_stmts.html#the-for-statement
4
试试这个:
for k in [w for w in W[a] if w < _]:
print 1
你需要在列表推导式中使用 if
条件(不过正如评论中提到的,这并不是最好的做法)。
补充:如果你想了解一些 Python 的“酷炫”功能,可以试试使用 itertools
:
for k in itertools.ifilter(lambda x: x < _ ,W[0]):
print 1
还有很多其他的解决方案,有些比其他的更优雅或高效。如果你想要更厉害一点,并且基本上在使用数组结构,可以看看 numpy
,它能让你体验到一种优雅和速度的全新世界。