对Python FOR循环的疑问

1 投票
2 回答
1377 浏览
提问于 2025-04-16 12:56

我对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,它能让你体验到一种优雅和速度的全新世界。

撰写回答