有人问如何在C#中使用Python的zip?...
......这让我想问,拉链有什么用?在什么情况下我需要这个?在基类库中我需要这个是否真的如此基础?
Chr*_*heD 12
一个用例:
>>> fields = ["id", "name", "location"]
>>> values = ["13", "bill", "redmond"]
>>> dict(zip(fields, values))
{'location': 'redmond', 'id': '13', 'name': 'bill'}
Run Code Online (Sandbox Code Playgroud)
尝试不用拉链做这个...
Aar*_*ght 11
最近有人在这里问了一个问题,我回答了Zip扩展方法,所以对某些人来说这显然很重要.;)
实际上,对于数学算法来说,这是一个相当重要的操作- 矩阵,曲线拟合,插值,模式识别等等.在数字信号处理等工程应用中也非常重要,你所做的大部分工作是组合多个信号或对它们应用线性变换 - 两者都基于样本索引,因此,拉链.压缩两个序列比基于某些键排序和连接它们要快得多,特别是当您事先知道序列具有相同数量的元素并且顺序相同时.
由于我目前的工作,我不能在这里详细说明,但总的来说,这对遥测数据也很有价值 - 工业,科学等等.通常,您将拥有来自数百或数千个点(并行源)的时间序列数据,并且您需要在设备上进行聚合,而不是水平聚合,而不是随着时间的推移.最后,您需要另一个时间序列,但需要所有单个点的总和或平均值或其他总和.
它可能听起来像SQL Server中的简单排序/组/连接(例如),但实际上很难以这种方式高效地执行.首先,时间戳可能不完全匹配,但你不关心几毫秒的差异,所以你最终必须生成一个代理键/行号和组 - 当然,代理行号只不过是你已经拥有的时间指数.压缩简单,快速,可无限并行化.
我不知道我是否称它为基础,但它很重要.我也不Reverse经常使用这种方法,但出于同样的原因,我很高兴我不必在我确实需要的时候自己写这些.
现在看起来对你有用的一个原因是.NET/C#3.5没有元组.C#4 确实有元组,当你使用元组时,压缩确实是一个基本操作,因为严格执行排序.
Jef*_*ris 10
如果你想同时迭代多个迭代,zip是很有用的,这在Python中是一个相当常见的场景.
如果你有一个M by N数组,并且你想要查看列而不是行,那么zip对我来说非常方便的一个真实场景.例如:
>>> 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))
Run Code Online (Sandbox Code Playgroud)
这是zip的常见用例:
x = [1,2,3,4,5]
y = [6,7,8,9,0]
for a,b in zip(x,y):
print a, b
Run Code Online (Sandbox Code Playgroud)
哪个会输出:
1 6
2 7
3 8
4 9
5 0
Run Code Online (Sandbox Code Playgroud)