如果我有2个列表:
list1 = [1, 2, 3, 4];
list2 = [10, 25, 35, 58];
,我想得到一个列表,其中包含2个列表的对应元素的乘积;
在Python中可以做到:
outlist = list(map(lambda a,b: a*b, list1, list2))
但是,在D中,我知道以下方法:
import std.stdio;
void main(){
auto list1 = [1, 2, 3, 4];
auto list2 = [10, 25, 35, 58];
int[] outlist;
foreach(i, item; list1){
outlist ~= item*list2[i];
}
writeln(outlist);
}
我的问题是:
Q1:能否将两个列表都作为foreach的参数?
Q2:如何使用map函数将2个列表的对应元素相乘?
感谢您的见解。
答案 0 :(得分:2)
关键是在应用{{1}之前,使用zip
将两个列表的元素(或D中已知的dynamic arrays)合并到tuples的单个数组中}}或map
。可以使用基于零的索引(在此示例中为foreach
和a[0]
)访问元组元素。
a[1]
上面的代码打印两次:
import std.algorithm.iteration : map;
import std.range : zip;
import std.stdio : writeln;
void main() {
auto list1 = [1, 2, 3, 4];
auto list2 = [10, 25, 35, 58];
// Question #2
auto list3 = zip(list1, list2).map!(a => a[0] * a[1]);
writeln(list3);
// Question #1
typeof(list1) list4;
foreach(a; zip(list1, list2)) {
list4 ~= a[0] * a[1];
}
writeln(list4);
}
符合预期。