摘要:有用户问:想把一个列表里的所有数值都乘以 2,再得到这个新列表,找不到「遍历列表、逐个运算、返回列表」的方法。其实列表抽屉里就有现成的一块:「创建新列表 逐一映射」。不用写循环,也不用建临时变量。
有没有快速直接的办法,把一个列表中的所有数值乘以 2,然后返回这个列表?我没找到遍历列表所有元素进行运算并且返回列表的方法。

很多人第一反应是用「对于任意 列表项 于列表」循环,再建一个空列表往里追加。这样能做,但要四五块积木,还要多一个全局或局部变量。App Inventor 其实专门为这件事准备了一块积木。
打开内置块的「列表」抽屉,往下翻,能找到这一块:
创建新列表 逐一映射 列表项 (列表) 到 (表达式)
它的意思是:把列表里的每一项依次放进「列表项」,算出「到」后面的表达式,再把所有结果按原来的顺序装进一个新列表返回。

▲ 逐一映射:每一项算一次,按原顺序装进新列表(示意图)
乘以 2 就这么写:「列表」插槽接要处理的列表,「到」插槽放一个乘法块,左边是「获取 列表项」,右边是 2。

▲ 用「逐一映射」把每项乘以 2
点一下按钮,标签显示 (6 10 16 24 40)。
1. 原列表不变,得到的是一个新列表。 映射完,「数字列表」里还是 3、5、8、12、20。想用新结果替换原来的,就把映射的结果再赋值回去:「设置 global 数字列表 为 创建新列表 逐一映射…」。
2. 「到」后面可以是任意表达式。 不只是乘以 2:加 10、四舍五入、求平方、摄氏度换算成华氏度(列表项 × 1.8 + 32),甚至把每个数拼成文本(「合并字符串 列表项 "元"」),都是改这一处就行。
3. 列表里混进了非数字会报错。 比如从文本框或网络读进来的数据里有空字符串,乘法会出错。可以先用同一抽屉里的「创建新的过滤列表」把非数字筛掉,再映射:过滤的测试条件放一个「是否为数字?」块。
「逐一映射」旁边还有两块,用法几乎一样,记住了一个就会另外两个:

▲ 映射、过滤、缩减三块积木(示意图)
积木 | 作用 | 例子 |
|---|---|---|
创建新列表 逐一映射 | 每一项算出一个新值,得到同样长度的新列表 | 每个数乘以 2 |
创建新的过滤列表 | 只保留满足条件的项 | 只要大于 10 的数 |
缩减列表 | 把所有项合成一个值 | 求总和、求最大值 |
三块可以接在一起用:先过滤掉不及格的分数,再把每个分数加 5 分,最后缩减求总分,全程不用写一个循环。
在有「逐一映射」之前,大家都是自己写循环:先把结果列表清空,遍历原列表,把每项乘以 2 追加进去。

▲ 老办法:自己写循环追加
效果一样,但多了一个过程、一个全局变量,还得记得每次先清空「结果」,否则第二次点按钮会接着往后追加。如果在遍历时还要顺便做别的事(比如同时统计个数、遇到某个值提前停下),用循环更合适;只是「每项算一下」的话,用「逐一映射」更省事。
把列表里每个数乘以 2,用列表抽屉里的「创建新列表 逐一映射」:列表接原列表,「到」里写「列表项 × 2」,返回的就是新列表。要筛选用「过滤列表」,要汇总用「缩减列表」。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。