Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python列表中比较并赋值_Python - Fatal编程技术网

在Python列表中比较并赋值

在Python列表中比较并赋值,python,Python,我有两张清单 [name1, email1, name2, email2, name3, email3, name4, email4] [name5, name5, name7] 我需要检查电子邮件是否存在,如果存在,则分别将其指定为名称和电子邮件,否则将名称指定为名称,并将电子邮件字段留空。在本例中,名称和电子邮件格式严格。所以我使用了@操作符来定义它是否在电子邮件中 这是我的密码: for i in range(0,len(mylist)): if '@' in mylist[i]

我有两张清单

[name1, email1, name2, email2, name3, email3, name4, email4]
[name5, name5, name7]
我需要检查电子邮件是否存在,如果存在,则分别将其指定为名称电子邮件,否则将名称指定为名称,并将电子邮件字段留空。在本例中,名称电子邮件格式严格。所以我使用了
@
操作符来定义它是否在电子邮件中

这是我的密码:

for i in range(0,len(mylist)):
    if '@' in mylist[i]:
        name = mylist[i-1]
        email = mylist[i]
    else:
        email = ''
        name = mylist[i]

    print name
    print email

这段代码的问题是,如果它看到电子邮件,它工作得很好,但是对于name字段,它将电子邮件设置为空白。Python中是否有这样做的方法?

您没有提到mylist是什么,但我假设它是电子邮件列表,您正在运行它的值以检查电子邮件是否存在(?)

for i, x in enumerate(mylist):
    if '@' in x and i > 0:
        name = mylist[i-1]
        email = x
由于列表以name开头,因此需要检查i+1,并检查mylist是否具有索引i+1。如果您找到它,那么您将把i增加2倍,以防止名称被单独解析-因此请使用一段时间

i = 0
while i < len(mylist):
    if i + 1 < len(mylist) and '@' in mylist[i+1]:
        name = mylist[i]
        email = mylist[i+1]
        i+=1
    else:
        email = ''
        name = mylist[i]

    print(name)
    print(email)
    i+=1
i=0
而我

你可以考虑把你的数据放在字典中,如果它存在,名字自动链接到电子邮件。在这里,我更改了您的原始列表,以反映您电子邮件地址中的“@”

mylist = ['name1', 'email@1', 'name2', 'email@2', 'name3', 'email@3', 'name4', 'email@4', 'name5', 'name6']
i = 0
name_email = {}
while i < len(mylist):
    if (i+1) != len(mylist) and '@' in mylist[i+1]:
        name_email[mylist[i]] = mylist[i+1]
        i += 1
    else:
        name_email[mylist[i]] = ""
    i += 1

print(name_email)  

output:
{'name1': 'email@1', 'name5': '', 'name2': 'email@2', 'name3': 'email@3', 'name6': '', 'name4': 'email@4'}
mylist=['name1','email@1“,”名称2“,”email@2“,‘名称3’,”email@3“,‘名称4’,”email@4“,”名称5“,”名称6“]
i=0
name_email={}
而我
您不希望电子邮件字段为空吗?您如何区分列表中的名称和电子邮件?(i)您不需要使用
range()
来迭代列表,它已经可以使用了。(ii)您也可以使用更好的数据格式。(iii)你的缩进是错误的,我已经更正了。@IgnacioVazquez Abrams本例中的电子邮件和名称严格采用相同的格式,因此我使用简单的逻辑,如果它有@operator,它是否是电子邮件我使用一个非常简单但有效的(在我的情况下)来检测电子邮件。我只是用@来确定这是不是一封电子邮件。如果字符串中存在@,则它的emailmylist可以包含给定列表中的任何一个我看过编辑的列表。请解释这一点:“此代码的问题是,如果它看到电子邮件,它工作得非常好,但对于名称字段,它将电子邮件放置为空白。在Python中是否仍有这样做的方法?”在循环时,由于名称字段没有“@”运算符,因此在这种情况下,它将电子邮件设置为空白,即使名称有电子邮件字段。当它看到@it set email字段时,它会再次设置email字段和name字段。