zip函数的用途是什么(在Python或C#4.0中)?

2024-05-08 09:37:49 发布

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

有人问How to do Python’s zip in C#?。。。

……这让我问,拉链有什么用?在什么情况下我需要这个?在基类库中,我真的需要这样的基础吗?


Tags: toin情况zip基类do基础how
3条回答

如果您希望同时迭代多个iterable,那么zip非常有用,这在Python中是相当常见的场景。

zip对我来说很有用的一个现实场景是,如果您有一个M x N数组,并且希望查看列而不是行。例如:

>>> five_by_two = ((0, 1), (1, 2), (2, 3), (3, 4), (4, 5))
>>> two_by_five = tuple(zip(*five_by_two))
>>> two_by_five
((0, 1, 2, 3, 4), (1, 2, 3, 4, 5))

一个用例:

>>> fields = ["id", "name", "location"]
>>> values = ["13", "bill", "redmond"]
>>> dict(zip(fields, values))
{'location': 'redmond', 'id': '13', 'name': 'bill'}

试着不用拉链。。。

最近有人问我这里的一个question,我用Zip扩展方法回答了这个问题,所以对某些人来说这显然很重要。;)

实际上,这对于数学算法来说是一个相当重要的操作-矩阵、曲线拟合、插值、模式识别等等。在诸如数字信号处理这样的工程应用中也非常重要,你所做的大部分工作是组合多个信号或对它们应用线性变换-两者都基于样本索引,因此,压缩它。压缩两个序列要比基于某个键对它们进行排序和连接快得多,特别是当您事先知道序列具有相同数量的元素并且顺序相同时。

鉴于我目前的工作,我不能在这里详细说明,但总的来说,这对遥测数据也很有价值——工业、科学,诸如此类。通常情况下,数据的时间序列来自成百上千个点(并行源),您需要在设备上而不是时间上进行聚合,但要在水平方向上进行聚合。在最后,您需要另一个时间序列,但要包含所有单独点的总和或平均值或其他聚合值。

它可能听起来像是SQL Server中的一个简单排序/组/连接(例如),但实际上很难这样做。首先,时间戳可能不完全匹配,但您不关心几毫秒的差异,因此您最终必须生成一个代理项键/行号和组,当然,代理项行号只不过是您已经拥有的时间索引。压缩是简单、快速和无限并行的。

我不知道我是否会称之为基础性的,但它是重要的。我也不经常使用Reverse方法,但出于同样的原因,我很高兴我不必在我确实需要它的时候自己继续写。

其中一个对您来说似乎没有用处的原因是.NET/C#3.5没有元组。C#4 does have tuples,当您使用元组时,压缩实际上是一个基本操作,因为顺序是严格执行的。

相关问题 更多 >