如何在列表中配对字符串?

时间:2018-01-09 03:23:43

标签: python

我有一个字符串列表,我希望将它们配对,使得最后一个和第二个最后一个是一对,倒数第二个和第三个最后一对,依此类推,中间有三个点。

实施例

假设我有以下列表

['a', 'b', 'c', 'd', 'e']

我想把它转换成这样的东西

['e...d', 'd...c', 'c...b', 'b...a', 'a...none']

到目前为止,我已经完成了以下工作,

>>> import string
>>>
>>> letters = string.ascii_lowercase[:5]
>>> letters = iter(reversed(letters))
>>> pair_iter = (c + '...' + next(letters, 'none') for c in letters)
>>> pair_iter = list(pair_iter)
>>> pair_iter
['e...d', 'c...b', 'a...none']

我不确定在这种情况下还能做什么,我知道next转到下一个字符串,但我应该如何复制上一个字符串然后转到下一个?

2 个答案:

答案 0 :(得分:2)

理解如下:

代码:

list(reversed(['{}..{}'.format(a, b) for a, b in zip(s, ['none'] + s[:-1])]))

测试代码:

s = ['a', 'b', 'c', 'd', 'e']

print(list(reversed(['{}..{}'.format(a, b) for a, b in zip(s, ['none'] + s[:-1])])))

结果:

['e..d', 'd..c', 'c..b', 'b..a', 'a..none']

答案 1 :(得分:2)

您还可以使用增量索引:

s = ['a', 'b', 'c', 'd', 'e']
new_s = s[::-1]
final_s = ['{}..{}'.format(new_s[i], new_s[i+1]) for i in range(len(new_s)-1)]+['{}..{}'.format(new_s[-1], 'none')]

输出:

['e..d', 'd..c', 'c..b', 'b..a', 'a..none']