Python 3.5 для цикла Set help метод возврата
Я новичок в Python, и мне нужна помощь. У меня есть опыт работы с C/C++, но не с Python. Мне просто нужна помощь.
Я не понимаю, что делают эти строки.
S = {-4 , 4 ,-3 , 3, -2 , 2, -1, 1, 0};
{x for x in S if x >= 0}
Я знаю, что S это множество. Я знаю, что мы перебираем множество S, но что я не недооцениваю и что делает "x" перед циклом for? и когда я использую функцию print, я получаю сообщение об ошибке:
NameError: name 'x' is not defined
Спасибо!
1 ответ
Поскольку вы знакомы с другим языком программирования, вот три способа обработки вашего алгоритма.
result
через заданное понимание, где x
ограничен только для понимания. Считается наиболее питонным и обычно наиболее эффективным.
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