我在学习列表理解的过程中遇到了一种我找不到资源来充分理解的问题。
问题源于以下问题: 我们有一个数组 [1,2,3,8,9] 并希望创建一个表达式,将每个奇数返回两次,而偶数只返回一次。
注意:还有提示我可以创建嵌套列表,但到目前为止还没有帮助我确定这对我有何帮助。
适当算法的输出应该是:[1,1,2,3,3,8,9,9]
使用循环,我可以像这样做我想做的事:
OtherNumList = [1, 2, 3, 8, 9]
OtherNumList2 = []
for i in OtherNumList:
if i%2==1:
OtherNumList2.append(i)
OtherNumList2.append(i)
else:
OtherNumList2.append(i)
print(OtherNumList2)
我只想使用一个表达式来完成此操作,或者使用列表推导式将其“单行”化。
我正在努力理解如何将理解设置为在 X 时追加两次,而在 Y 时追加一次。
即使只是构建理解的概念,我也非常感谢您的帮助;我不希望有一个勺子喂养的解决方案,如果你能引导我完成你的思考过程,我宁愿选择它,这样我就可以更好地为将来更好地理解列表奠定自己的基础! :)
最佳答案
您可以在没有外部工具的情况下在单个列表理解中执行此操作。您只需要根据从外部序列中提取的值来创建并遍历内部值序列:
OtherNumList = [1, 2, 3, 8, 9]
OtherNumList2 = [rep for i in OtherNumList for rep in (i,)*(i%2+1)]
print(OtherNumList2)
这里的技巧是第二个for
。它根据 i
是偶数(一个副本)还是奇数(两个副本)迭代一个或两个 i
副本的 tuple
。方便的是,我们在这里甚至不需要真正的 bool 检查; (i%2+1)
对于偶数始终为 1
,对于奇数始终为 2
,因此我们可以直接使用它进行乘法运算。然后直接生成正确次数的结果值,不需要额外的扁平化。
关于python - 列表理解 Append Odds Twice Evens Once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55420116/