精华内容
下载资源
问答
  • Python中zip函数用法

    千次阅读 2018-05-29 14:46:36
    A simple introduction about the zip I have a list of 2-item tuples and I’d like to convert them to 2 lists where the first contains the first item in each tuple and the second list holds ...

    背景:

    在做深度学习数据预处理的过程中经常会遇到zip函数,现在好好的学习的一波。

    1. zip函数:

    1.1 定义:

    建议的解决方案是引入一个新的内置序列发生器功能,可在builtin模块。此功能被称为zip和具有以下定义:

    zip(seqa, [seqb, [...]])

    zip()采用一个或多个序列并将它们的元素编织在一起,就像map(None,…)对长度相等的序列一样。 当最短的序列耗尽时,编织停止。

    返回值:

    zip()返回一个真正的Python列表,就像map()一样。

    1.2 zip函数使用

    下面引入stackoverflow上面提出的一个问题,来引出zip如何使用。
    Transpose/Unzip Function (inverse of zip)?

    1.2.1 问题提出:

    我有一个2元组元组的列表,我想将它们转换为2个列表,其中第一个元素包含每个元素中的第一个元素元组,和第二个列表保存第二个项目。
    比如:

    original = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
    # and I want to become...
    result = (['a', 'b', 'c', 'd'], [1, 2, 3, 4])

    请问有很好的python内建函数可以处理这个问题吗?

    1.2.2 高票回答:

    zip是它自己的反面! 只要您使用特殊*操作符。

    >>> zip(*[('a', 1), ('b', 2), ('c', 3), ('d', 4)])
    [('a', 'b', 'c', 'd'), (1, 2, 3, 4)]

    通过zip函数我们就可以简单的达到我们预期希望输出的结果了。

    1.2.3 zip使用注意

    如果您的列表长度相同,您会发现zip函数运行良好,但列表长度如何不一样,您可以看到如下示例:

    original = [('a', 1), ('b', 2), ('c', 3), ('d', 4),('e',)]
    out = zip(*original)
    list = []   # so, we need to show it in list
    for i in out:
        list.append(i)
    print(list)

    输出:

    [('a', 'b', 'c', 'd', 'e')]

    也就是说当我们二个元组数据个数不对称的时候,直接使用zip函数可能会出现问题了。

    我们如何解决这个问题了?

    我们可以简单使用map函数帮助我们解决这个问题。

    out = map(None, *[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', )])

    输出:

    [('a', 'b', 'c', 'd', 'e'), (1, 2, 3, 4, None)]

    1.2.4 实际中我们这样使用zip函数

    在实践中,我喜欢在我的程序中使用zip(* iterable)(这是您要查找的代码片段),如下所示:

    def unzip(iterable):
        return zip(*iterable)
    In conclusion:

    1.3 zip函数简单总结:

    1.3.1 zip

    X=[1,2,3,4]
    Y=['a','b','c','d']
    XY=zip(X,Y)
    # Resulting in:
    Out: [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]

    1.3.2 Unzip

    x,y=zip(*XY)

    参考文章:
    1. python官方zip函数说明1
    2. python官方zip函数说明2
    3. stackoverflow上zip问题
    4. 本篇文章ipython笔记

    展开全文
  • 定义:zip([iterable, …])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则...

    定义:zip([iterable, …])

    zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些

    tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list

    unzip(解压),看下面的例子就明白了:

    >>> a = [1,2,3]>>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> zipped = zip(a,b)

    [(1, 4), (2, 5), (3, 6)]>>> zip(a,c)

    [(1, 4), (2, 5), (3, 6)]>>> zip(*zipped)

    [(1, 2, 3), (4, 5, 6)]

    (1)二维矩阵转置

    比如我们有一个由列表描述的二维矩阵

    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

    通过python列表推导的方法,我们也能轻易完成这个任务

    (从下边的代码也可以看出这种one-line for-loop的index顺序从左向右依次是维数)

    print [ [row[col] for row in a] for col in range(len(a[0]))]

    [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

    另外一种方法就是利用zip函数:

    >>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> zip(*a)

    [(1, 4, 7), (2, 5, 8), (3, 6, 9)]>>> map(list,zip(*a))

    [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

    这种方法速度更快但也更难以理解

    zip(*a):将list看成tuple解压,恰好得到我们“行列互换”的效果;

    map(list,zip(*a)):再通过对每个元素应用list()函数,将tuple转换为list;

    zip函数接受任意多个序列作为参数,将所有序列按相同的索引组合成一个元素是各个序列合并成的tuple的新序列,新的序列的长度以参数中最短的序列为准。另外(*)操作符与zip函数配合可以实现与zip相反的功能,即将合并的序列拆成多个tuple。

    ①tuple的新序列

    >>>x=[1,2,3],y=['a','b','c']>>>zip(x,y)

    [(1,'a'),(2,'b'),(3,'c')]

    ②新的序列的长度以参数中最短的序列为准.

    >>>x=[1,2],y=['a','b','c']>>>zip(x,y)

    [(1,'a'),(2,'b')]

    ③(*)操作符与zip函数配合可以实现与zip相反的功能,即将合并的序列拆成多个tuple。

    >>>x=[1,2,3],y=['a','b','c']>>>zip(*zip(x,y))

    [(1,2,3),('a','b','c')]

    (2)以指定概率获取元素

    >>>import random>>> def random_pick(seq,probabilities):

    x= random.uniform(0, 1)

    cumulative_probability= 0.0

    for item, item_probability in zip(seq, probabilities):

    cumulative_probability+=item_probabilityif x

    return item>>> for i in range(15):

    random_pick("abc",[0.1,0.3,0.6])'c'

    'b'

    'c'

    'c'

    'a'

    'b'

    'c'

    'c'

    'c'

    'a'

    'b'

    'b'

    'c'

    'a'

    'c'

    这个函数有个限制,指定概率的列表必须和元素一一对应,而且和为1,否则这个函数可能不能像预想的那样工作。

    先利用random.uniform()函数生成一个0-1之间的随机数并复制给x;

    利用zip()函数将元素和他对应的概率打包成tuple;

    然后将每个元素的概率进行叠加,直到和大于x终止循环;

    这样,”a”被选中的概率就是x取值位于0-0.1的概率,同理”b”为0.1-0.4,”c”为0.4-1.0,假设x是在0-1之间平均取值的,显然我们的目的已经达到

    References:

    展开全文
  • 展开全部zip() 功能是从参数的多个迭代器62616964757a...元组、列表、字典等迭代器它返回一个zip对象,其内部元素为元组,一组一组的,可以转化为列表或元组,这里要强调一下,Python2和Python3返回的zi...

    展开全部

    resize,m_lfit,w_600,h_800,limit_1

    zip() 功能是从参数的多个迭代器中62616964757a686964616fe59b9ee7ad9431333365653163选取元素组合成一个新的迭代器。顾名思义,它就是一个将对象进行打包和解包的函数。

    它可以传入的参数包括;元组、列表、字典等迭代器

    它返回一个zip对象,其内部元素为元组,一组一组的,可以转化为列表或元组,这里要强调一下,Python2和Python3中返回的zip对象有所不同。

    Python3中zip()函数再不再返回list对象,但是可以通过list强行转换。(类似的函数变化还有dictionary关联的keys()、values()、items(),map(),filter())。

    打包zip(iterables)

    上面的代码使用的环境是Python3.6,其中list (z)操作就是强制转换。注意一个问题,a和b这两个列表是不同长短的,这时候zip函数就会匹配完最短的那个便结束。

    当zip函数的参数只有一个时,它将从iterable中依次取一个元素,组成一个元组。

    解包zip(*iterables)

    解包,zip 相反,可理解为解压,返回多维矩阵形式,有几个组元素就返回几维的。

    比如,下面我是用三个列表组合起来的迭代式,那么解压后就返回三维的矩阵

    zip高级用法

    讲完了基本的再来说一下该函数的高级用法。高级用法离不开一个词:Pythonic,就是将代码写的更优雅美观,看起来有逼格!

    1. 列表推导

    例如:

    a = [1,2,3,4]

    b = [5,6,7,8]

    我们要同时遍历a、b,且要对它们进行操作,那就要放在同一个for循环内,zip函数正好合适

    注意:如果是Python2环境中,要使用izip才能提高效率。

    当然,如果你需要对下标进行操作,那么还需要加上enumerate函数

    2. 使用zip创建键值对,zip方法返回的是一个元组,用它来创建键值对,简单明了。

    展开全文
  • python中zip函数有哪些高级用法zip函数定义首先我们来看一下zip函数的定义zip()功能是从参数的多个迭代器选取元素组合成一个新的迭代器。顾名思义,它就是一个将对象进行打包和解包的函数。它可以传入的参数包括...

    python

    zip

    函数有哪些高级用法?

    zip

    函数定义首先我们来看一下

    zip

    函数的定义

    zip()

    功能是从参数的多个迭代器中选取元素组合成一个新的迭

    代器。

    顾名思义,

    它就是一个将对象进行打包和解包的函数。

    它可以传入的参数包括;元组、列表、字典等迭代器它返回

    一个

    zip

    对象,其内部元素为元组,一组一组的,可以转化

    为列表或元组,这里要强调一下,

    Python2

    Python3

    中返

    回的

    zip

    对象有所不同。

    Python3

    zip()

    函数再不再返回

    list

    对象,但是可以通过

    list

    强行转换。

    (类似的函数变化还有

    dictionary

    关联的

    keys()

    values()

    items()

    map()

    filter()

    打包

    zip(iterables)

    上面的代码使用的环境是

    Python3.6

    ,其

    list (z)

    操作就是强制转换。注意一个问题,

    a

    b

    这两个

    列表是不同长短的,这时候

    zip

    函数就会匹配完最短的那个

    便结束。当

    zip

    函数的参数只有一个时,它将从

    iterable

    依次取一个元素,组成一个元组。解包

    zip(*iterables)

    解包,

    zip

    相反,可理解为解压,返回多维矩阵形式,有几个组元

    素就返回几维的。比如,下面我是用三个列表组合起来的迭

    代式,那么解压后就返回三维的矩阵

    zip

    高级用法讲完了基

    本的再来说一下该函数的高级用法。高级用法离不开一个词:

    Pythonic

    就是将代码写的更优雅美观,

    看起来有逼格!

    1.

    表推导例如:

    展开全文
  • 本文实例讲述了Python中zip()函数的定义及用法,相信对于Python初学者有一定的借鉴价值。详情如下:一、定义:zip([iterable, ...])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象对应的...
  • 在本篇文章里小编给大家分享的是关于Python中zip函数用法,需要的朋友们可以学习参考下。
  • zip函数的原型为:zip([iterable, …])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度...
  • python中zip()函数用法举例定义:zip([iterable, ...])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。...
  • 本文实例讲述了Python zip()函数用法。分享给大家供大家参考,具体如下:这里介绍python中zip()函数的使用:>>> help(zip)Help on built-in function zip in module __builtin__:zip(...)zip(seq1 [, seq2 [...]]) -...
  • Python中zip函数用法

    2019-05-10 01:07:11
    zip() 函数用于将可迭代的对象作为参数,将对象对应的元素打包成一个个元组,然后返回由这些元组组成的对象。 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压...
  • python中zip()函数用法举例定义:zip([iterable, ...])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。...
  • 那么首先被大家选择的编程软件就是python,也用在各行各业之,并被大家所熟知,所以也有越来越多的python学习者关注python相关问题,今天环球网校的小编就来和大家讲讲Python zip函数。zip() 函数是 Python 内置...
  • zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象对应的元素打包成一个个tuple(元组),然后返回由这些 tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数长度...
  • python zip函数的详细分析使用zip()函数来可以把列表合并,并创建一个元组对的列表我语言表达起来可能有些粗糙,话不多说看示例示例1复制代码l1=[1,2,3]lt2=[4,5,6]lt3=zip(l1,lt2)zip()是可迭代对象,使用时必须将...
  • zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。 1.示例1: x = [1, 2, 3] y = [4, 5, 6] z = [7, 8, 9] xyz = zip(x, y, z) print xyz 运行的结果是: [(1, 4, 7), (2,...
  • python中zip函数用法

    2018-04-01 21:27:31
    python中zip函数返回一个以元组为元素的列表,其中第 i 个元组包含每个参数序列的第 i 个元素。返回的列表长度被截断为最短的参数序列的长度。只有一个序列参数时,它返回一个1元组的列表。没有参数时,它返回一个空...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,269
精华内容 21,307
关键字:

python中zip()函数的用法

python 订阅