扩展列表理解(以便更好地理解)?

2024-10-04 07:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在看一些代码,并试图找出如何解析列表以更好地理解它。
运行它的代码的完整长度是相当长的,但是我想我可以试着展示一下我是如何将它“分解”成更多的代码行来更好地理解它的。你知道吗

例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}

再次,我有一些困难打破这一点,可能是因为设置符号。你知道吗

不幸的是,所有这些示例都是我试图理解的一段很长代码的一部分。
如果有帮助的话,我可以提供它(但是它很长/有多个文件)。
然而,我认为这大部分只是试图使用列表理解将一行代码分解为多行,以便更好地了解它在做什么。
如果能帮上忙,我会很感激的。你知道吗

编辑:我去掉了我解决的例子,把其他的都留下了。你知道吗


Tags: key代码in列表forifrandomkeys
1条回答
网友
1楼 · 发布于 2024-10-04 07:26:06

首先,试着运行一些示例代码,看看是否得到相同的结果。你知道吗

需要注意的一点是,每次执行外部循环时都会覆盖列表/字典。根据代码的其余部分,这可能不是目的。你知道吗

至于更复杂的一个,从这样的事情开始

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) 

相关问题 更多 >