2010-12-01 95 views
0

如何在列表中分配增量名称?如何将增量名称分配给列表中的元素?

>>> ccList 
['az <[email protected]>', 'cc777 <[email protected]>', 'user11 <[email protected]>'] 
>>> 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个CC等,它仍然打印所有抄送收件人?

+3

出了什么问题只是用指数为列表,元组等? – 2010-12-01 00:35:06

+4

为什么name1比通常的名字[1]更好? – 2010-12-01 00:35:43

+1

查找python字典或'dict'结构。这对于做这种键值对是很棒的。 – DGH 2010-12-01 00:38:34

回答

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' 

我们把所有的名字,除了最后一个,将它们连接成一个单独的字符串,并在每个相邻的对之间加上','。然后我们将其替换为最终的格式字符串,并将姓氏放在末尾(这样我们就可以很好地处理“和”)。

0

尝试:

for i in range(len(ccList)): 
    mailTuple = parseaddr(ccList[i]) 
    cc = mailTuple[0] 
    exec("name%d=cc"%i) 
+0

这看起来像会起作用,但请不要! Python有真正的数据结构,我们应该使用它们。即时创建新变量名称是一些动态语言期望您工作的方式,但它非常不合Pythonic。 – 2010-12-01 00:48:29

+0

......但*请*不要这样做,永远! – 2010-12-01 00:53:47

+0

@Karl Knechtel:同意。使用列表是正确的方法。 – Kabie 2010-12-01 00:54:17

3

如果你真的想参照的名称作为NAME0,NAME1,等我会建议使用的字典:

names = {} 
for i in range(len(ccList)): 
    mailTuple = parseaddr(ccList[i]) 
    cc = mailTuple[0] 
    names["name"+str(i)] = cc 

然后你就可以用names["name0"]访问NAME0 ,names["name1"]等。这是一个更安全的选择比exec /当地人字典作为一些其他答案建议。

尽管最好的解决方案,在我看来,只是简单地使用列表,因为您用于mailTuple

names = [] 
for i in range(len(ccList)): 
    mailTuple = parseaddr(ccList[i]) 
    names.append(mailTuple[0]) 

作为一个侧面说明,你应该考虑mailTuple一个更好的名字,因为它甚至不是一个元组。我的建议是简单地命名它mails

0

您可以添加到)从瓦尔(返回的字典:

for i in range(len(ccList)): 
    mailTuple = parseaddr(ccList[i]) 
    cc = mailTuple[0] 
    vars()["name"+str(i)] = cc 

一旦你这样做,变数应该与您需要的名称存在。

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] 
相关问题