В Python, как посчитать число «1» в списке адресов электронной почты? - PullRequest
0 голосов
/ 25 ноября 2018

Вот что у меня есть:

emails = ['james1@example.com', 'januline12@januline.com', 'fillip.morris@pm.com',
          'ray@bradbury.org', 'me+you@hotmail.com', 'seven11@gmail.com',
          'noreply@msd.com', 'cars4u@tesla.com']

def email_security_scan(a, b):
    numbers = []
    for item in a:
        for subitem in item.split():
            if subitem == b:
                numbers.append +=1
    print(numbers)

email_security_scan(emails, 1)

Не работает, возвращает [].

Ответы [ 5 ]

0 голосов
/ 25 ноября 2018
emails = [ 'james1@example.com', 'januline12@januline.com', 'fillip.morris@pm.com',
       'ray@bradbury.org', 'me+you@hotmail.com', 'seven11@gmail.com', 
       'noreply@msd.com', 'cars4u@tesla.com' ]
sum([i.count('1') for i in emails])

Выход: 4

0 голосов
/ 25 ноября 2018

Вы можете представить это так:

def checker(x):
    if "1" in x:
        return 1
    else:
        return 0

Теперь получить счет можно так же просто, как:

emails = [checker(x) for x in emails]
sum(emails)

Что здесь происходит?

  1. checker ищет одну или несколько "1" в записи вашего списка.
  2. emails = [checker(x) for x in emails] применяет checker к каждой записи в вашем списке и перезаписывает переменную emails нашим новым пониманием списка.
  3. sum делает именно то, что вы ожидаете.
0 голосов
/ 25 ноября 2018

Есть некоторые проблемы с вашей логикой:

  • Вы используете str.split для строк без пробелов.Нет необходимости разбивать вашу строку.
  • Вы сравниваете целые числа со строками.Это не сработает.
  • Вы добавляете в список вместо увеличения переменной счетчика.

Так что это сработает, если вам нужно подсчитать количество сообщений электронной почтыадреса , содержащие '1':

def email_security_scan(a, b):
    count = 0
    for item in a:
        if str(b) in item:
            count += 1
    print(count)

email_security_scan(emails, 1)

# 3

Проще говоря, вы можете использовать sum с выражением генератора:

def email_security_scan(a, b):
   print(sum(str(b) in item for item in a))

email_security_scan(emails, 1)

# 3

Или подсчитать общее число из '1' по всем адресам электронной почты, вы можете использовать str.join, а затем str.count:

def email_security_scan(a, b):
    print(''.join(a).count(str(b)))

email_security_scan(emails, 1)

# 4
0 голосов
/ 25 ноября 2018

Вот еще один способ использования sum() на генераторе:

emails = [ 'james1@example.com', 'januline12@januline.com', 'fillip.morris@pm.com',
           'ray@bradbury.org', 'me+you@hotmail.com', 'seven11@gmail.com', 
           'noreply@msd.com', 'cars4u@tesla.com' ]

print(sum(1 for email in emails if '1' in email))
# 3

Или:

print(sum('1' in email for email in emails))
# 3
0 голосов
/ 25 ноября 2018

Приведенный ниже код будет подсчитывать количество единиц в каждом из элементов в списке и даст результат.

emails = ['james1@example.com', 'januline12@januline.com', 'fillip.morris@pm.com',
          'ray@bradbury.org', 'me+you@hotmail.com', 'seven11@gmail.com',
          'noreply@msd.com', 'cars4u@tesla.com']

def email_security_scan(a, b):
    numbers = 0
    for item in a:
        numbers += item.count(b)
     print(numbers)

email_security_scan(emails, '1')

Для приведенного выше примера выходные данные будут равны 4.

...