为了账号安全,请及时绑定邮箱和手机立即绑定

如何循环遍历列表并使用“zip()”将一项添加到元组列表中的每个元组?

如何循环遍历列表并使用“zip()”将一项添加到元组列表中的每个元组?

梵蒂冈之花 2023-12-09 17:04:44
我的数据文件包含八千行,其中每一行都是一个元组。前两行是:(2000, 1, 1, 1, 336)(2000, 1, 1, 2, 335)我想重复循环工作日并将工作日附加到每个数据元组。行列表应如下所示:[(2000, 1, 1, 1, 336, 'Sat'), (2000, 1, 1, 2, 335, 'Sun'), ...]我尝试了不同的方法,并设法获得了除所需组合之外的几乎所有可能的组合。我无法完全理解我所误解的事情。代码weekdays = ['Sat','Sun','Mon','Tue','Wed','Thu','Fri']    a = read_file('VIK_sealevel_2000.txt')zipp = list(zip(a, weekdays))print(zipp[0:2])   输出[((2000, 1, 1, 1, 335), 'Sat'), ((2000, 1, 1, 2, 336), 'Sun')]
查看完整描述

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

第一个问题是如何高效地循环度过工作日。一个干净的解决方案是使用itertools.cycle().


以下将生成无限重复的工作日序列。


import itertools


weekdays = ['Sat','Sun','Mon','Tue','Wed','Thu','Fri']

itertools.cycle(weekdays)

zip()当最短输入可迭代用完时,该函数将停止。现在我们有无限的工作日序列,最短的输入将是八千行数据。


>>> import itertools

>>> weekdays = ['Sat','Sun','Mon','Tue','Wed','Thu','Fri']

>>> data = [(2000, 1, 1, 1, 336), (2000, 1, 1, 2, 335), (2000, 1, 1, 1, 334), 

            (2000, 1, 1, 2, 333), (2000, 1, 1, 1, 332), (2000, 1, 1, 2, 331), 

            (2000, 1, 1, 1, 330), (2000, 1, 1, 2, 329), (2000, 1, 1, 1, 328), 

            (2000, 1, 1, 2, 327)]

>>> list(zip(data, itertools.cycle(weekdays)))

[((2000, 1, 1, 1, 336), 'Sat'), ((2000, 1, 1, 2, 335), 'Sun'), 

 ((2000, 1, 1, 1, 334), 'Mon'), ((2000, 1, 1, 2, 333), 'Tue'), 

 ((2000, 1, 1, 1, 332), 'Wed'), ((2000, 1, 1, 2, 331), 'Thu'), 

 ((2000, 1, 1, 1, 330), 'Fri'), ((2000, 1, 1, 2, 329), 'Sat'), 

 ((2000, 1, 1, 1, 328), 'Sun'), ((2000, 1, 1, 2, 327), 'Mon')]

最后,为了获取内部元组中的工作日,我们可以在列表理解中创建新的元组。


>>> [t + (day,) for t, day in zip(data, itertools.cycle(weekdays))]

[(2000, 1, 1, 1, 336, 'Sat'), (2000, 1, 1, 2, 335, 'Sun'), 

 (2000, 1, 1, 1, 334, 'Mon'), (2000, 1, 1, 2, 333, 'Tue'), 

 (2000, 1, 1, 1, 332, 'Wed'), (2000, 1, 1, 2, 331, 'Thu'), 

 (2000, 1, 1, 1, 330, 'Fri'), (2000, 1, 1, 2, 329, 'Sat'), 

 (2000, 1, 1, 1, 328, 'Sun'), (2000, 1, 1, 2, 327, 'Mon')]

这里,t是与每行数据关联的元组,day是工作日,并且语法t + (day,)创建通过将数据元组与工作日组合形成的新元组。


查看完整回答
反对 回复 2023-12-09
?
HUH函数

TA贡献1836条经验 获得超4个赞

要将工作日添加到每个元组中,请尝试使用:


a = [(2000, 1, 1, 1, 335), (2000, 1, 1, 2, 336)] # was read_file('VIK_sealevel_2000.txt')

weekdays = ['Sat','Sun','Mon','Tue','Wed','Thu','Fri']

zipp = [row[0] + (row[1],) for row in zip(a, weekdays)]


查看完整回答
反对 回复 2023-12-09
  • 2 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信