如何在列表中指定增量名称?
>>> ccList
['az <az@example.com>', 'cc777 <cc777@example.com>', 'user11 <user11@example.com>']
>>> for i in range(len(ccList)):
mailTuple = parseaddr(ccList[i])
cc = mailTuple[0]
print cc
az
cc777
user11
>>>
>>> for i in range(3):
name = "name"+str(i)
print name
name0
name1
name2
>>>
我试图以
结束name0 = az
name1 = cc77
name2 = user11
以便我稍后可以参考这些名称。我怎样才能做到这一点?基本上,我不明白怎么写这个:
>>> for i in range(len(ccList)):
mailTuple = parseaddr(ccList[i])
cc = mailTuple[0]
"name"+str(i) = cc
....
当然,这不起作用。谢谢!
更新
感谢大家的回答!我认为Thomas K的这个列表解决方案适用于这种情况;除了如果cc收件人不是3,我无法解决如何打印:
>>> ccNames = []
>>> for i in range(len(ccList)):
mailTuple = parseaddr(ccList[i])
cc = mailTuple[0]
ccNames.append(cc)
>>> "sender attached %s ccs which are %s, %s, and %s" % (len(ccNames), ccNames[0], ccNames[1], ccNames[2])
'sender attached 3 ccs which are az, cc777, and user11'
>>>
那么如何修复代码,以便如果不是3个ccs,它仍会打印所有cc收件人?
答案 0 :(得分:3)
如果你真的想将名称称为name0,name1等,我建议使用字典:
names = {}
for i in range(len(ccList)):
mailTuple = parseaddr(ccList[i])
cc = mailTuple[0]
names["name"+str(i)] = cc
然后,您可以使用names["name0"]
,names["name1"]
等访问name0。这比使用exec
/本地词典更加安全,而其他一些答案也是如此。
虽然我认为最好的解决方案就是使用mailTuple
时使用的列表。
names = []
for i in range(len(ccList)):
mailTuple = parseaddr(ccList[i])
names.append(mailTuple[0])
作为旁注,你应该考虑更好的mailTuple
名称,因为它甚至不是一个元组。我的建议是简单地命名为mails
。
答案 1 :(得分:2)
正如其他人所评论的那样,你真的不想为此创建新名称。您希望有一个列表,就像您的输入所包含的列表一样。然后,您可以像索引原始索引一样索引它。
仅使用名称创建列表非常简单:
nameList = [parseaddr(cc)[0] for cc in ccList]
关于更新,这应该可以解决问题:
>>> ccNames = [parseaddr(cc)[0] for cc in ccList]
>>> "sender attached %s ccs which are %s, and %s" % (len(ccNames), ', '.join(ccNames[:-1]), ccNames[-1])
'sender attached 3 ccs which are az, cc777, and user11'
我们采用除了最后一个之外的所有名称,并将它们连接成一个单独的字符串,每个相邻对之间带有','。然后我们将它替换为我们的最终格式字符串,将最后一个名称放在最后(这样我们就可以整齐地处理“和”)。
答案 2 :(得分:1)
除非有明显的理由不这样做,否则只需使用一个清单:
names = []
for i in range(len(ccList)):
mailTuple = parseaddr(ccList[i])
names.append(mailTuple[0])
names[0] # az
names[1] # cc77
还有一种更简洁的方法来制作清单:
names = [parseaddr(ccaddr)[0] for ccaddr in ccList]
答案 3 :(得分:0)
尝试:
for i in range(len(ccList)):
mailTuple = parseaddr(ccList[i])
cc = mailTuple[0]
exec("name%d=cc"%i)
答案 4 :(得分:0)
您可以添加从vars()返回的dict:
for i in range(len(ccList)):
mailTuple = parseaddr(ccList[i])
cc = mailTuple[0]
vars()["name"+str(i)] = cc
执行此操作后,变量应与您所需的名称一起存在。