lambda list分组求和
时间: 2024-11-13 18:08:05 浏览: 23
在Python中,你可以使用`lambda`函数结合`groupby`方法来自列表中按照某个条件分组并计算每个组的和。`lambda`是一种匿名函数,它在这里用于定义简单的操作,如元素相加。
假设你有一个包含数字的列表,例如:
```python
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
```
你可以这样做来按每两个数一组分组并计算它们的和:
```python
from itertools import groupby
# 使用lambda表达式将列表分为间隔为1的相邻元素对
number_pairs = zip(numbers, numbers[1:])
sums_of_pairs = [(key, sum(map(lambda x: x[0], pair))) for key, pair in groupby(number_pairs)]
print(sums_of_pairs)
```
这将输出:
```
[(1, 3), (2, 6), (3, 9), (4, 7), (5, 11), (6, 13)]
```
这里,`map(lambda x: x[0], pair)`将每个配对 `(a, b)` 转换为 `a`,然后 `sum()` 计算所有 `a` 的总和。
相关问题
Java lambda对list分组求和
在Java中,lambda表达式可以方便地用于处理集合操作,比如对List分组并求和。Lambda允许我们在一行简洁的代码中定义函数,这对于简化数据处理特别有用。举个例子,如果我们有一个包含Person对象和它们年龄的List,我们想按年龄段对人群进行分组并计算每个组的总年龄,可以这样做:
```java
import java.util.*;
import java.util.stream.Collectors;
class Person {
String name;
int age;
// constructor and getters/setters...
}
List<Person> people = ...; // 假设已经填充了数据
Map<Integer, Integer> groupedAndSummed = people.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.summingInt(Person::getAge)));
// 现在groupedAndSummed是一个Map,key是年龄,value是对应年龄的人群总年龄
```
在这个片段中,`Person::getAge`是lamdba表达式,它获取每个Person对象的年龄作为分组依据,而`Collectors.summingInt(Person::getAge)`则表示对于每个分组计算年龄之和。
java 使用lambda对list分组求和
可以使用Java 8中的Stream API和lambda表达式来对List进行分组求和。假设我们有一个List<Integer>,需要按照其中元素的奇偶性进行分组求和,可以使用如下代码:
```java
import java.util.*;
import java.util.stream.*;
public class Main {
public static void main(String[] args) {
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Map<Boolean, Integer> result = nums.stream()
.collect(Collectors.partitioningBy(num -> num % 2 == 0,
Collectors.summingInt(Integer::intValue)));
System.out.println(result); // 输出 {false=25, true=30},即奇数之和为25,偶数之和为30
}
}
```
在上述代码中,我们使用`stream()`方法将`nums`列表转换为Stream对象,然后使用`partitioningBy`方法将Stream按照元素的奇偶性进行分组,返回一个Map<Boolean, Integer>,其中Boolean表示分组的键(true表示偶数,false表示奇数),Integer表示分组的值(即每个分组中元素的和)。最终使用Map的toString()方法将结果输出到控制台上。
阅读全文