2010-12-01 99 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] 
相關問題