[英]Expanding out list comprehension (to understand it better)?
我正在查看一些代碼並試圖弄清楚如何解析列表理解以更好地理解它。
運行它的全長代碼等相當長,但我想我可以嘗試展示我如何嘗試將其“分解”為更多行代碼以更好地理解它。
示例 1:
for currentIter in trainEx:
temp = {key: weights[key] + 0.05 * currentF[key]*currentT[1] if key in weights else 0.05*currentF[key]*currentT[1] for key in currentF.keys()}
同樣,我不完全確定如何“分解” temp 等於所有零碎。
我試過這個,但我知道這是不正確的:
for currentIter in trainEx:
if key in weights:
temp = {key: weights[key] + 0.05 * currentF[key]*currentT[1]}
else:
for key in currentF.keys():
temp = {key: 0.05*currentF[key]*currentT[1]}
例子2:
pi = {weights.keys()[i] : random.randint(1, 100) for i in range(len(weights.keys())) if random.randint(0,1) == 1}
同樣,我在分解它時遇到了一些麻煩,可能是因為 set 符號。
不幸的是,所有這些示例都是我試圖理解的很長一段代碼的一部分。
如果有幫助,我可以提供它(但它很長/多個文件)。
但是,我認為其中大部分只是試圖將使用列表理解的一行代碼分解為多行,以便更好地了解它在做什么。
任何幫助將不勝感激,看看我哪里出錯了。
編輯:我刪除了我解決的例子並留下了其他例子。
首先,嘗試運行一些示例代碼,看看是否得到相同的結果。
需要注意的一件事是,每次執行外循環時都會覆蓋列表/字典。 根據代碼的其余部分,這可能不是意圖。
至於更復雜的,從這樣的開始
temp = dict()
for currentIter in trainEx:
for key in currentF.keys():
temp[key] = (weights[key] + 0.05 * currentF[key]*currentT[1]) if (key in weights) else (0.05*currentF[key]*currentT[1])
然后提取條件
temp = dict()
for currentIter in trainEx:
for key in currentF.keys():
if key in weights:
temp[key] = weights[key] + 0.05 * currentF[key]*currentT[1]
else:
temp[key] = 0.05*currentF[key]*currentT[1]
對於最后一個,它類似,但您不需要range()
pi = dict()
for k in weights.keys():
if random.randint(0,1) == 1:
pi[k] = random.randint(1, 100)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.