我对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&lt; 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
最诚挚的问候,
答案 0 :(得分: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
来解锁整个世界的优雅和速度。
答案 1 :(得分:3)
AFAIK,for语句中的if子句仅允许在列表推导或生成器表达式中使用。见http://docs.python.org/reference/compound_stmts.html#the-for-statement