2024-05-08 09:37:49 发布
网友
有人问How to do Python’s zip in C#?。。。
……这让我问,拉链有什么用?在什么情况下我需要这个?在基类库中,我真的需要这样的基础吗?
如果您希望同时迭代多个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扩展方法回答了这个问题,所以对某些人来说这显然很重要。;)
Zip
实际上,这对于数学算法来说是一个相当重要的操作-矩阵、曲线拟合、插值、模式识别等等。在诸如数字信号处理这样的工程应用中也非常重要,你所做的大部分工作是组合多个信号或对它们应用线性变换-两者都基于样本索引,因此,压缩它。压缩两个序列要比基于某个键对它们进行排序和连接快得多,特别是当您事先知道序列具有相同数量的元素并且顺序相同时。
鉴于我目前的工作,我不能在这里详细说明,但总的来说,这对遥测数据也很有价值——工业、科学,诸如此类。通常情况下,数据的时间序列来自成百上千个点(并行源),您需要在设备上而不是时间上进行聚合,但要在水平方向上进行聚合。在最后,您需要另一个时间序列,但要包含所有单独点的总和或平均值或其他聚合值。
它可能听起来像是SQL Server中的一个简单排序/组/连接(例如),但实际上很难这样做。首先,时间戳可能不完全匹配,但您不关心几毫秒的差异,因此您最终必须生成一个代理项键/行号和组,当然,代理项行号只不过是您已经拥有的时间索引。压缩是简单、快速和无限并行的。
我不知道我是否会称之为基础性的,但它是重要的。我也不经常使用Reverse方法,但出于同样的原因,我很高兴我不必在我确实需要它的时候自己继续写。
Reverse
其中一个对您来说似乎没有用处的原因是.NET/C#3.5没有元组。C#4 does have tuples,当您使用元组时,压缩实际上是一个基本操作,因为顺序是严格执行的。
如果您希望同时迭代多个iterable,那么zip非常有用,这在Python中是相当常见的场景。
zip对我来说很有用的一个现实场景是,如果您有一个M x N数组,并且希望查看列而不是行。例如:
一个用例:
试着不用拉链。。。
最近有人问我这里的一个question,我用
Zip
扩展方法回答了这个问题,所以对某些人来说这显然很重要。;)实际上,这对于数学算法来说是一个相当重要的操作-矩阵、曲线拟合、插值、模式识别等等。在诸如数字信号处理这样的工程应用中也非常重要,你所做的大部分工作是组合多个信号或对它们应用线性变换-两者都基于样本索引,因此,压缩它。压缩两个序列要比基于某个键对它们进行排序和连接快得多,特别是当您事先知道序列具有相同数量的元素并且顺序相同时。
鉴于我目前的工作,我不能在这里详细说明,但总的来说,这对遥测数据也很有价值——工业、科学,诸如此类。通常情况下,数据的时间序列来自成百上千个点(并行源),您需要在设备上而不是时间上进行聚合,但要在水平方向上进行聚合。在最后,您需要另一个时间序列,但要包含所有单独点的总和或平均值或其他聚合值。
它可能听起来像是SQL Server中的一个简单排序/组/连接(例如),但实际上很难这样做。首先,时间戳可能不完全匹配,但您不关心几毫秒的差异,因此您最终必须生成一个代理项键/行号和组,当然,代理项行号只不过是您已经拥有的时间索引。压缩是简单、快速和无限并行的。
我不知道我是否会称之为基础性的,但它是重要的。我也不经常使用
Reverse
方法,但出于同样的原因,我很高兴我不必在我确实需要它的时候自己继续写。其中一个对您来说似乎没有用处的原因是.NET/C#3.5没有元组。C#4 does have tuples,当您使用元组时,压缩实际上是一个基本操作,因为顺序是严格执行的。
相关问题 更多 >
编程相关推荐