怀疑Python FOR循环

时间:2011-03-03 15:59:21

标签: python

我对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

最诚挚的问候,

2 个答案:

答案 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