Leetcode "уникальные адреса электронной почты" объяснение вопроса - PullRequest
0 голосов
/ 14 января 2019

Я наткнулся на этот код на leetcode. Как работает эта строка, чтобы удалить все после '+'?

local = local [: local.index ('+')]

class Solution(object):
    def numUniqueEmails(self, emails):
        seen = set()
        for email in emails:
            local, domain = email.split('@')
            if '+' in local:
                local = local[:local.index('+')]
            seen.add(local.replace('.','') + '@' + domain)
        return len(seen)

1 Ответ

0 голосов
/ 14 января 2019

То, что делает этот код, - это получение первой и последней частей письма по отдельности путем разделения письма. Пример:

email = "1234+5678@gmail.com"
//local is now 1234+5678. domain is gmail.com
local, domain = email.split('@')

Теперь, следующий бит кода (который вы специально задали в своем вопросе) :

if '+' in local:
    local = local[:local.index('+')]

То, что он делает, это , если + находится в local, он получает индекс этого + и устанавливает local равным символам перед ним . В противном случае local останется без изменений. В этом случае local будет теперь 1234, потому что local.index('+') возвращает 4. Следовательно, local = local[0:4] устанавливает local равным первым 4 символам.

Последний бит кода:

seen.add(local.replace('.','') + '@' + domain)
return len(seen)

Для этого нужно заменить символ . в local пустым символом. Затем он добавляет обратно @, который был первоначально разделен, а также domain, который в этом примере был gmail.com. Итак, теперь seen должно равняться: 1234@gmail.com. Затем он возвращает длину seen, которая равна 14. Я надеюсь, что этот ответ дал вам понимание того, что делает код.

...