我不明白这些行在做什么。
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
我不明白这些行在做什么。
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
由于您熟悉另一种编程语言,因此这里有三种处理算法的方法。
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