如何为列表元素分配增量名称?

时间:2010-12-01 00:31:02

标签: python

如何在列表中指定增量名称?

>>> 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收件人?

5 个答案:

答案 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

执行此操作后,变量应与您所需的名称一起存在。