Python:检查字符串是否在列表中的任何项目中?

时间:2014-04-28 10:24:08

标签: python string list

我有server_list我正在解析文件中的电子邮件地址。我想收集非某些服务器的所有地址,例如gmail.com。

目前我在文件读取循环中有这个:

server_list = ["gmail.com", "yahoo.com"] #etc
for servers in server_list:
   if servers in emailaddress: #get emailaddress from inside of a open(file) line loop
        badmail.extend(emailaddress)

这允许我收集列表badmail中的错误电子邮件。有没有办法创建一个好的电子邮件列表,如果emailaddress中的任何项目中都没有server_list,或者我必须创建所有电子邮件列表并删除不良邮件?

1 个答案:

答案 0 :(得分:4)

您可以使用all功能确保电子邮件地址不会以server_list中的任何服务器结束,就像这样

server_list, good_email = ["gmail.com", "yahoo.com"], []
if all(not emailaddress.endswith(server) for server in server_list):
    good_email.append(emailaddress)

同样,您可以使用any功能来获取错误的电子邮件地址,例如

server_list, bad_email = ["gmail.com", "yahoo.com"], []
if any(emailaddress.endswith(server) for server in server_list):
    bad_email.append(emailaddress)

看起来您正在从文件中读取电子邮件地址。所以,你可以做这样的事情

server_list, good_list, bad_list = ["gmail.com", "yahoo.com"], [], []
with open("email.txt") as in_file:
    for email_address in in_file:
        email_address = email_address.rstrip()
        if any(email_address.endswith(server) for server in server_list):
            bad_list.append(email_address)
        else:
            good_list.append(email_address)

根据lvc's suggestion,我们实际上可以将一组数据传递给str.endswith。因此,代码可以进一步简化为

server_list, good_list, bad_list = ("gmail.com", "yahoo.com"), [], []
...
...
if email_address.endswith(server_list):
    bad_list.append(email_address)
else:
    good_list.append(email_address)