下面是一个更时髦的ECMAScript 6版本:zip= rows=>rows[0].map((_,c)=>rows.map(row=>row[c]))

插图等价物到Python{zip(*args)}:> zip([['row0col0', 'row0col1', 'row0col2'],

['row1col0', 'row1col1', 'row1col2']]);[["row0col0","row1col0"],

["row0col1","row1col1"],

["row0col2","row1col2"]]

(FizzyTea指出ES6具有各种参数语法,因此下面的函数定义将类似于python,但请参阅下面的免责声明.这不会是它自己的反义词zip(zip(x))不平等x不过,正如马特·克莱默所指出的zip(...zip(...x))==x(就像普通的蟒蛇zip(*zip(*x))==x))

备选定义-等价物。到Python{zip}:> zip = (...rows) => [...rows[0]].map((_,c) => rows.map(row => row[c]))> zip( ['row0col0', 'row0col1', 'row0col2'] ,

['row1col0', 'row1col1', 'row1col2'] );

// note zip(row0,row1), not zip(matrix)same answer as above

(请注意,...语法此时可能存在性能问题,将来也可能出现问题,因此,如果使用第二个带有各种参数的答案,则可能需要对其进行Perf测试。)

这里有一个单线盒:function zip(arrays) {

return arrays[0].map(function(_,i){

return arrays.map(function(array){return array[i]})

});}// > zip([[1,2],[11,22],[111,222]])// [[1,11,111],[2,22,222]]]// If you believe the following is a valid return value://

> zip([])// []// then you can special-case it, or just do// return arrays.length==0 ? [] : arrays[0].map(...)

上述假设数组的大小与它们应该的大小相同。它还假设您传递一个列表参数列表,而Python版本中的参数列表是可变的。如果你想要这些“特征”,见下文。它只需要2行额外的代码。

下面将模仿Python的zip在数组大小不相等的边缘情况下,默默地假装数组的较长部分不存在的情况下的行为:function zip() {

var args = [].slice.call(arguments);

var shortest = args.length==0 ? [] : args.reduce(function(a,b){

return a.length

return shortest.map(function(_,i){

return args.map(function(array){return array[i]})

});}// > zip([1,2],[11,22],[111,222,333])// [[1,11,111],[2,22,222]]]// > zip()// []

这将模仿Python的itertools.zip_longest行为,插入undefined在没有定义数组的情况下:function zip() {

var args = [].slice.call(arguments);

var longest = args.reduce(function(a,b){

return a.length>b.length ? a : b }, []);

return longest.map(function(_,i){

return args.map(function(array){return array[i]})

});}// > zip([1,2],[11,22],[111,222,333])// [[1,11,111],[2,22,222],[null,null,333]]// > zip()// []

如果您使用这最后两个版本(Variadic Aka)。多参数版本),那么zip就不再是它自己的逆版本了。模仿zip(*[...])Python的成语,你需要做zip.apply(this, [...])当您想要反转zip函数时,或者如果您希望类似地有一个可变数量的列表作为输入。

增编:

若要使此句柄具有任何可迭代性(例如,在Python中,可以使用zip在字符串、范围、映射对象等方面,可以定义以下内容:function iterView(iterable) {

// returns an array equivalent to the iterable}

但是如果你写zip在以下几个方面方式,道路,即使这样也没有必要:function zip(arrays) {

return Array.apply(null,Array(arrays[0].length)).map(function(_,i){

return arrays.map(function(array){return array[i]})

});}

演示:> JSON.stringify( zip(['abcde',[1,2,3,4,5]]) )[["a",1],["b",2],["c",3],["d",4],["e",5]]

(或者你可以用一个range(...)Python风格的函数,如果您已经编写了一个。最终,您将能够使用ECMAScript数组理解或生成器。)

python zip函数_相当于Python的zip函数相关推荐

  1. 数据库创建函数_达梦数据库创建UUID函数

    数据库创建函数_达梦数据库创建UUID函数 接触达梦数据库有一段时间了,整理了一些资料,今天分享一下达梦数据UUID自定义函数 UUID函数定义 很多数据库都有提供UUID函数,可是接触达梦数据库后, ...

  2. python len函数_知识清单Python必备的69个函数,你掌握了吗?

    本文纲要 Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很 ...

  3. python sorted下标_全!Python基础之原生数据类型、判断和循环、函数和文件操作合集...

    长文预警! Python基础系列会将基础内容大致分为三到五个板块,每块着重讲一方面,知识不会很难,主要是以小例子的形式解读,如果你已经入门Python,希望可以帮你温习一下:如果你想入门Python, ...

  4. 什么是python的内置函数_什么是python内置函数

    python的内置函数截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.那今天我们就一起来认识一下python的 ...

  5. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  6. python入门之函数调用内置函数_第九篇 python基础之函数,递归,内置函数

    阅读目录 一 数学定义的函数与python中的函数 二 为何使用函数 背景提要 三 函数和过程 四 函数参数 五 局部变量和全局变量 六 前向引用之'函数即变量' 七 嵌套函数和作用域 八 递归调用 ...

  7. append函数_高质量python代码:考虑用生成器来改写直接返回列表的函数

    写在前面:内容参照自<Effective Python>,其实你完全可以直接去看书,什么?你不想自己看书,那么你也可以关注我,我会不定期从书中挑出常用到的有效方法分享出来,这样你就可以一边 ...

  8. python从零开始进阶_从零开始学Python - 第020课:函数使用进阶

    在之前的课程中,我们讲到过关于函数的知识,我们还讲到过Python中常用的数据类型,这些类型的变量都可以作为函数的参数或返回值:通过前几节课的学习,我们又知道了写在类中的函数通常称之为方法,它代表了类 ...

  9. python while函数_详解python while 函数及while和for的区别

    1.while循环(只有在条件表达式成立的时候才会进入while循环) while 条件表达式: pass while 条件表达式: pass else: pass 不知道循环次数,但确定循环条件的时 ...

最新文章

  1. 怎样让小写自动转换成大写_办公软件操作技巧031:如何在word中输入大写数字...
  2. [转]实用至上!12个Vista服务可关闭
  3. 操作系统页面置换算法
  4. PHP中操作MySQL的一些要注意的问题
  5. 微服务网关路由过滤作用介绍
  6. .Net 高效开发之不可错过的实用工具(转载)
  7. 回溯法|Backtracking
  8. HashMap散列无序存储测试
  9. 手工释放linux内存——/proc/sys/vm/drop_caches
  10. java 类继承命名_Java 语言的类间的继承关系是( )。_学小易找答案
  11. 绝对干货:供个人开发者赚钱免费使用的一些好的API接口
  12. Linux(centos7.4)上FTP服务器搭建(使用yum)
  13. sklearn 细节 —— SGDClassifier、Perceptron(分类模型)
  14. c语言第三章程序设计实训
  15. 5iABCDS原来是这样赋能 “严肃游戏”的!
  16. add new color number to the color drop down in enovia PLM
  17. 模态框间相互传输数据
  18. C++STL之stack栈容器
  19. 一加7t人脸识别_一加7Pro和一加7TPro你发现什么异常?详细对比才发现这个问题!...
  20. 动态规划解资源分配问题

热门文章

  1. java平台沙箱安全组件,安全-如何创建Java沙箱?
  2. linux c++ utf8 gbk,Linux C++ gbk转为utf-8
  3. 5 获取窗口位置_详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)
  4. 未找到插件 ‘org.springframework.bootspring-boot-maven-plugin‘(已解决 )
  5. Open3d之点云可视化
  6. Android高级开发面试题目,再也不用担心不能升职加薪了。
  7. django搭建一个小型的服务器运维网站-查看和修改服务器配置与数据库的路由...
  8. java.util报错
  9. linux源代码剖析之二boot
  10. android 自定义button点击事件,自定义View(2)-从源码分析button的onClick和onTouch