多个if语句列表理解

2024-10-01 05:02:19 发布

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

晚上好

自从几天前我发现这种奇妙的编码形式以来,我一直在努力提高列表理解能力。目前我正在尝试用多个if语句来理解列表。这是我试图重写的代码(供您理解)

for i in range(len(keys)):
    key = keys[i]

    if key == 1:
        newAns = [1, 0, 0, 0]
        answers.append(newAns)
    elif key == 2:
        newAns = [0, 1, 0, 0]
        answers.append(newAns)
    elif key == 3:
        newAns = [0, 0, 1, 0]
        answers.append(newAns)
    else:
        newAns = [0, 0, 0, 1]
        answers.append(newAns)

这就是我目前所做的

^{pr2}$

这个列表包含int的值,我想根据键的值将它们转换为向量。在

我有点卡住了,希望能在如何完成这项任务方面得到一些指导。非常感谢。在


Tags: key代码in编码列表forif语句
3条回答

除了@UltrInstinct的答案,请get不做if语句:

answer_map = {1: [1, 0, 0, 0], 2: [0, 1, 0, 0], 3: ...}
answers = [answer_map,get(x,[0, 0, 0, 1]) for x in keys]

现在:

^{pr2}$

如你所愿。在

如果你想要一个荒谬的单行线,你可以使用嵌套的三元表达式。在

In [4]: keys = [2, 1, 1, 3, 0, 2]

In [5]: result  = [
   ...:     [1,0,0,0] if key == 1 else
   ...:     [0,1,0,0] if key == 2 else
   ...:     [0,0,1,0] if key == 3 else
   ...:     [0,0,0,1]
   ...:     for key in keys
   ...: ]

In [6]: result
Out[6]:
[[0, 1, 0, 0],
 [1, 0, 0, 0],
 [1, 0, 0, 0],
 [0, 0, 1, 0],
 [0, 0, 0, 1],
 [0, 1, 0, 0]]

但是,最好将逻辑包装在函数中,并在列表理解中调用该函数:

^{pr2}$

在本例中,dict也很好地工作,如其他答案所示。一般来说,不要试图把一堆东西塞进一个单子里去理解。在

我们把所有的keynewAns放在dict中,并在你的列表理解中使用它们怎么样?在

answer_map = {1: [1, 0, 0, 0], 2: [0, 1, 0, 0], 3: ...}
answers = [answer_map[x] if x in answer_map else [0, 0, 0, 1] for x in keys]

更新

我完全忘了dict.get(key, default)(谢谢,@U9转发!)。你也可以说:

^{pr2}$

相关问题 更多 >