1

我不明白这些行在做什么。

S = {-4 , 4 ,-3 , 3, -2 , 2, -1, 1, 0};
{x for x in S if x >= 0}

我知道 S 是一个集合。我知道我们正在循环遍历集合 S,但我不明白 for 循环之前的“x”在做什么?当我在函数中使用 print 时,我收到错误消息:

NameError: name 'x' is not defined
4

1 回答 1

0

由于您熟悉另一种编程语言,因此这里有三种处理算法的方法。

result通过集合理解,其中x仅适用于理解。被认为是最pythonic并且通常最有效的。

result_functional, 功能等价于result, 但在使用时不如集合理解实现优化lambda。这里x的范围是匿名lambda函数。

result_build,成熟的循环,通常效率最低。

S = {-4 , 4 ,-3 , 3, -2 , 2, -1, 1, 0}

result = {x for x in S if x >= 0}
# {0, 1, 2, 3, 4}

result_functional = set(filter(lambda x: x >= 0, S))
# {0, 1, 2, 3, 4}

result_build = set()

for x in S:
    if x>= 0:
        result_build.add(x)
        print(x)

# 0
# 1
# 2
# 3
# 4     

assert result == result_build
assert result == result_functional
于 2018-02-04T00:11:09.993 回答