Python自定义map2,zip2函数

本文探讨如何在Python中实现自定义的map2和zip2函数,利用生成器高效处理数据,同时介绍了这两种函数的基本用法和优势。
摘要由CSDN通过智能技术生成
#! /usr/bin/python
# Filename: map2.py

def map2(arg1,*arg2):
    if hasattr(arg1,'__call__')==False:
        typ = type(arg1)
        raise TypeError,'%s object is not callable' %typ
    if hasattr(arg2,'__iter__')==False:
        raise TypeError,'argument 2 to map() must support iteration'
    length=len(arg2[0])
    for item in arg2:
        if len(item)<>length:
            raise TypeError,"the argument of arg2's length is different"
    list = [apply(a,(x)) for (x) in zip(*arg2)]
    return list


a = lambda x,y,z,t:x*y*z*t
print map2(a,[1,2,3,4],[5,6,7,8],[8,1,2,5],[1,5,6,7])


生成器:

#! /usr/bin/pythpn
# encoding:utf-8

def zip2(*arg2):
    len1 = len(arg2)
    len2 = len(arg2[0])
    print len1
    print len2
    for j in range(len2):
        yield tuple([arg2[i][j] for i in range(len1)])

l1 = [1,4,5]
l2 = [3,6,8]
l3 = [7,6,5]
for item in zip2(l1,l2,l3):
    print item


Pythonzip()函数用于将多个可迭代对象(例如列表、元组)作为参数,返回一个包含这些对象中对应元素组成的元组的迭代器。 zip()函数的返回值是一个可迭代对象,可以使用list()函数将其转换为列表。需要注意的是,zip()函数返回的可迭代对象只能进行一次迭代遍历,第二次遍历就是空的。 使用zip()函数可以实现以下几个功能: 1. 将多个序列按照对应位置的元素进行组合,形成一个新的元组。 2. 迭代多个序列,同时获取对应位置的元素进行处理。 3. 对二维矩阵进行行列转置。 下面是几个zip()函数的应用示例: 1. 将两个列表按照对应位置的元素进行组合: ``` a = [1, 2, 3] b = [4, 5, 6] ab = zip(a, b) print(list(ab)) # [(1, 4), (2, 5), (3, 6)] ``` 2. 使用zip()函数同时迭代多个序列: ``` name = ('jack', 'alex', 'sony', 'joey') age = (25, 28, 21, 30) for a, n in zip(name, age): print(a, n) ``` 3. 对二维矩阵进行行列转置: ``` a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(list(map(list, zip(*a)))) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]] ``` 需要注意的是,zip()函数的参数可以有任意多个,每个参数可以是不同长度的可迭代对象。当参数中的可迭代对象长度不一致时,zip()函数将以最短的可迭代对象为准进行组合。 总结一下,zip()函数是用于将多个可迭代对象进行组合的函数,可以用于同时迭代多个序列或对二维矩阵进行行列转置。需要注意的是,zip()函数返回的可迭代对象只能进行一次遍历。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Pythonzip 函数的用法](https://blog.csdn.net/weixin_30810583/article/details/99390525)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python教程:zip 函数的用法](https://blog.csdn.net/qdPython/article/details/123353945)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值