我对 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
最好的问候,
请您参考如下方法:
尝试:
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 以解锁优雅和速度的整个世界。
