如何将列表分片赋值的多行循环代码改写为单行表达式?
单行表达式实现分片赋值
很简单,咱们可以利用zip()把目标位置的索引和x中的元素一一对应,然后用一行for循环完成赋值,代码如下:
for idx, val in zip(range(4 + lbp, 4 + ubp), x): h[idx] = val
思路拆解:
- 原代码里
t1遍历range(lbp, ubp),对应的目标索引是4 + t1,这个范围可以直接用range(4 + lbp, 4 + ubp)生成,逻辑完全一致 - 用
zip()把这个索引范围和x的元素两两配对,每一次循环都能精准拿到要赋值的位置和对应的值 - 把多行循环压缩成一行,可读性和执行效率都和原代码保持一致
测试验证:
给定测试变量:
h = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] x = [20, 21] lbp = 2 ubp = 4
执行单行代码后,h会变为[1, 2, 3, 4, 5, 6, 20, 21, 9, 10],和原多行循环的执行结果完全相同。
内容的提问来源于stack exchange,提问作者Cristian Ramon-Cortes
相关产品推荐
相关产品推荐

