2009-10-15 177 views
0

我正在嘗試遍歷列表並獲取列表的每個部分,對它進行編碼並在完成時加入結果。作爲一個例子,我有一個字符串,它生成一個列表,每個元素的長度爲16個字符。在Python中對列表進行迭代

message = (u'sixteen-letters.sixteen-letters.sixteen-letters.sixteen-letters.') 
result = split16(message, 16) 
msg = ';'.join(encode(result.pop(0)) for i in result) 

編碼函數需要一個16字節的字符串並返回結果。然而,按照它的編寫方式,它只對列表中的一半元素進行編碼。

如果我試圖理解:

result = [encode(split16(message, 16) for message in list_of_messages)] 
result = ''.join(result) 

它導致整個名單一次發送。我需要做的是將每個元素分別發送到編碼函數,獲得結果然後將它們連接在一起。

有沒有簡單的方法來實現這一目標?

+0

您的列表理解在語法上是錯誤的 – SilentGhost 2009-10-15 11:07:30

+0

感謝SilentGhost,測試了您的代碼並完美地工作。 – rescue 2009-10-15 11:16:31

+0

@rescue:不要評論你自己的問題。請修復您的問題以獲得正確的代碼。 – 2009-10-15 11:29:19

回答

1

你想要做這樣的事嗎?

';'.join(encode(i) for i in message.split('.')) 

當然這可能只是

';'.join(encode(i) for i in result) 

如果夠複雜了您的split16功能。

0

我不太清楚你所追求的,但

msg=";".join(map(encode,(message[i:i+16] for i in range(0,len(message),16)))) 
1

我有點困惑什麼你究竟想要做的,這是由您發佈的代碼缺少括號加劇:

result = [encode(split16(message, 16) for message in list_of_messages] 

如果是這樣:

result = [encode(split16(message, 16) for message in list_of_messages)] 

或:

result = [encode(split16(message, 16)) for message in list_of_messages] 

我想第二個會做你想做的。

此代碼:

msg = ';'.join(encode(result.pop(0)) for i in result) 

在您通過result迭代的每一步,因爲失敗,而是在與pop每一步縮短它。它應該是:

msg = ';'.join(encode(i) for i in result)