按顺序连接列表的元素对

时间:2016-11-17 03:41:14

标签: python python-2.7 list sliding-window

我想知道完成以下操作的pythonic方法是什么。假设我有一个列表:

days = ['m', 't', 'w', 'r', 'f', 's', 's']

我想获得一个看起来像这样的列表:

['t-m', 'w-t', 'r-w', 'f-r', 's-f', 's-s']

所以它必须将原始列表视为迭代器并移动以执行连接。

我会认为这可以通过某种列表理解和iter()函数的使用来实现,但到目前为止我没有运气!我使用的是python 2.7。

2 个答案:

答案 0 :(得分:4)

在列表推导中使用zip()与切片days[1:]和原始days来迭代反向元素对的滑动窗口:

>>> days = ['m', 't', 'w', 'r', 'f', 's', 's']
>>> ['-'.join(pair) for pair in zip(days[1:], days)]
['t-m', 'w-t', 'r-w', 'f-r', 's-f', 's-s']

答案 1 :(得分:0)

使用列表理解与枚举,迭代列表排除最后一项

>>> days = ['m', 't', 'w', 'r', 'f', 's', 's']
>>> ['{}-{}'.format(days[n+1], i) for n,i in enumerate(days[:-1])]
['t-m', 'w-t', 'r-w', 'f-r', 's-f', 's-s']