2 回答

TA貢獻1891條經驗 獲得超3個贊
第一個問題是如何高效地循環度過工作日。一個干凈的解決方案是使用itertools.cycle().
以下將生成無限重復的工作日序列。
import itertools
weekdays = ['Sat','Sun','Mon','Tue','Wed','Thu','Fri']
itertools.cycle(weekdays)
zip()當最短輸入可迭代用完時,該函數將停止?,F在我們有無限的工作日序列,最短的輸入將是八千行數據。
>>> 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,)創建通過將數據元組與工作日組合形成的新元組。

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)]
添加回答
舉報