2015-05-21 59 views
-1

我有以下代碼,它使用更小的列表(cmd.cmd_list)中的新值更新列表(rsp.rsp_list)中的值。我怎樣才能以更pythonic的方式做以下事情?之間的內存和執行時間使用另一個值更新列表中的值

for i in rsp.rsp_list: 
     for j in cmd.cmd_list.data: 
      if i.common.id == j.id: 
       i.common.value.CopyFrom(j.val) 
+1

什麼類型的具有i和j? – wanderlust

+0

你可以找到像這樣的類似的項目: 爲我在設置(一).intersection(二):打印我 –

+0

你可以重新定義'rsp.rsp_list'和'cmd.cmd_list.data'作爲字典嗎? –

回答

1

典型tradeof:

cmd_data = {cmd.id: cmd.value for cmd in cmd.cmd_list} 
for rsp in rsp.rsp_list: 
    if rsp.common.id in cmd_data: 
     rsp.common.value.CopyFrom(cmd_data[rsp.common.id]) 
+1

兩條評論:1)如果'cmd_data'中不存在'rsp.common.id',將會引發'KeyError'。你可能應該在cmd_data:'中使用rsp.common.id。 2)創建字典時不需要使用列表理解,如果省略方括號,它將成爲生成器表達式,並具有相同的結果。 –

+0

完全同意你的意見,將更新片段。 – vacehcto

+0

嘗試除了會加快執行時間。 – SuperBiasedMan

相關問題