将列表中每个列表的第三个元素相加
Sum third element of each list in a list
我目前的列表如下:
((map 9 150) (compass 13 35) (water 150 240) (sandwich 50 16) (rope 50 49))
我正在尝试遍历此列表以获取粗体值并给出这些值的总和。我一直在查看 car 和 cdr,但我似乎无法获得这些值。有没有简单的方法可以做到这一点?
这将是列表中的 third
值或 caddr
。于是
(mapcar #'third products) ; ==> (150 35 240 16 49)
如果您的列表很小,您可以只使用应用:
(apply #'+ (mapcar #'third products)) ; ==> 490
对于更大的列表(超过 1000 个),我建议使用 reduce
(reduce #'+ (mapcar #'third products)) ; ==> 490
使用 reduce
你可以使用 :key
来避免 mapcar
:
(reduce #'+ products :key #'third) ; ==> 490
您也可以使用 loop
:
(loop :for element :in products
:sum (third element)) ; ==> 490
我目前的列表如下:
((map 9 150) (compass 13 35) (water 150 240) (sandwich 50 16) (rope 50 49))
我正在尝试遍历此列表以获取粗体值并给出这些值的总和。我一直在查看 car 和 cdr,但我似乎无法获得这些值。有没有简单的方法可以做到这一点?
这将是列表中的 third
值或 caddr
。于是
(mapcar #'third products) ; ==> (150 35 240 16 49)
如果您的列表很小,您可以只使用应用:
(apply #'+ (mapcar #'third products)) ; ==> 490
对于更大的列表(超过 1000 个),我建议使用 reduce
(reduce #'+ (mapcar #'third products)) ; ==> 490
使用 reduce
你可以使用 :key
来避免 mapcar
:
(reduce #'+ products :key #'third) ; ==> 490
您也可以使用 loop
:
(loop :for element :in products
:sum (third element)) ; ==> 490