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
Другие вопросы по тегам