在Python中,如何计算电子邮件地址列表中的数字“ 1”?

时间:2018-11-25 13:36:23

标签: python list count sublist

这是我到目前为止所拥有的:

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 :(得分:2)

您的逻辑存在一些问题:

  • 您在没有空格的字符串上使用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

或者要计算所有电子邮件地址中'em的总数'1',您可以使用str.join,然后使用str.count

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

email_security_scan(emails, 1)

# 4

答案 1 :(得分:1)

下面的代码将计算列表中每个项目的1,并给出结果。

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。

答案 2 :(得分:1)

这是在生成器上使用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

答案 3 :(得分:1)

您可以这样表示:

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可以满足您的期望。

答案 4 :(得分:0)

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