python 两个等长元组/列表如何成对求和

一.两种方法演示

以元组为例

'''
两个等长元组成对求和
'''
t1 = (4,6,-2,-20)
t2 = (-7,-4,11,12)

#方法1.
# 1)返回zip object,拿到[(4, -7), (6, -4), (-2, 11), (-20, 12)] 
r1 = zip(t1,t2)
# for item in r1:
#     print(item)
print(r1)
print(list(r1))

#2)拿到(-3, 2, 9, -8)
r2 = tuple(i + j for i,j in zip(t1,t2))
print(r2)

#方法2 
# 1)lambda表达式和map  返回map object
r3 = map(lambda x,y : x + y,t1,t2)
print(r3)
print(list(r3))
#zip函数的返回值,是个“阅后即焚”的迭代器,再次访问会出现空
#print(tuple(r3))
print(tuple(map(lambda x,y : x + y,t1,t2)))

二.关于zip

1)string对象,list对象,tuple对象在Python中都是可迭代的,都可以作为zip函数的参数来使用
2)zip函数,如果参数中的可迭代对象长度不相同,那么就以长度最短的为准,舍弃超长的那部分
3)zip函数的返回值,是个“阅后即焚”的迭代器,只可以迭代遍历一次,再次遍历将为空
4)可以通过list或者tuple或者for循环遍历zip对象

三.成对求和的应用

有一个旅行者,假设初始位置(0,0),采用二维坐标,求经过若干次移动后到达的新位置,假设移动路线如下:
[(1,2),(3,-5),(-4,-8),(12,6)]
横坐标:左为正,右为负
纵坐标:上为正,下为负
思路如下:
1)由于新位置建立在旧位置的基础上,是一种“连续性”的移动,所以适合用reduce函数
2)用到元组成对求和

代码如下:

from functools import reduce
list_x = [(1,2),(3,-5),(-4,-8),(12,6)]
#方式1
#初始x=(0,0),y=(1,2)
# r = reduce(lambda x,y : tuple(i + j for i, j in zip(x, y)), list_x,(0,0))

#方式2
#reduce实现的是4对元组之间的连续‘求和’
#初始x=(0,0),y=(1,2),用map实现两个元组相加,再用tuple提取出来map值并返回;
#第二次x=(1,2),y=(3,-5)...
r = reduce(lambda x,y : tuple(map(lambda x1, y1: x1 + y1, x,y)), list_x,(0,0))
print('reduce与lambda结合方式实现的输出结果是:',r)

output:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值