将数组/列表分割成一组对并执行聚合

2024-06-16 08:42:18 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个整数数组{1,2,3,4,5,6,7,8},我想把它们配对成{1,2},{3,4}等等},然后对它们执行减法运算,最后对结果求和。你知道吗

以下是我现在编写的代码,以便更好地理解:

static void Main(string[] args)
{
    int[] ints = { 4, 8, 8, 3, 9, 0, 7, 8, 2, 2 };

    ints = ints.OrderBy(x => x).Select(x=>x).ToArray();

    List<int> lints = new List<int>();

    for (int i = 0, j = 1; i < ints.Length; i = i + 2, j = j + 2)
    {
        lints.Add(ints.ElementAtOrDefault(j) - ints.ElementAtOrDefault(i));
    }

    int lintsum = lints.Sum();

    Console.WriteLine(lintsum);
}

在C#的linq中有没有更好的方法来实现这一点?我怎样才能在python中做同样的事情呢?你知道吗


Tags: 代码stringmainargsstatic整数数组list
3条回答

使用Python的另一种解决方案是:

ints = [1, 2, 3, 4, 5, 6, 7, 8]
print sum(y - x for x, y in zip(*([iter(ints)] * 2)))

ints = [4, 8, 8, 3, 9, 0, 7, 8, 2, 2]
print sum(y - x for x, y in zip(*([iter(ints)] * 2)))

给予:

4
-9

您可以使用MoreLINQ,它在IEnumerable<T>上有一个Pairwise扩展方法,该方法完全满足您的需要,它调用元素及其前一个元素上的委托:

var ints = new[] { 1, 2, 3, 4, 5 };
var result = ints.Pairwise((first, second) => second - first);
Console.WriteLine(result.Sum());

使用Python可以通过以下方式获得结果:

In [25]: start = [1,2,3,4,5,6,7,8]

In [26]: tuples = [item for item in zip(start[::2], start[1::2])]

In [27]: tuples
Out[27]: [(1, 2), (3, 4), (5, 6), (7, 8)]

In [28]: answer = sum(rhs-lhs for (lhs, rhs) in tuples)

In [29]: answer
Out[29]: 4

相关问题 更多 >