Python 将字符串元素按大小2分组

Python 将字符串元素按大小2分组,python,Python,我想将字符串元素按大小2分组,如下所示: myl = ['a','b','c','d','e'] 我做了如下尝试: [['a','b'],['c','d'],['e']] 有什么问题吗?您可以使用以下方法: print [myl[i:i+2] for i in len(myl)] 对于len中的i(myl)没有任何意义len(myl)只是一个数字,所以您不能遍历它 您可以使用: >>> myl = ['a','b','c','d','e'] >>> [m

我想将字符串元素按大小2分组,如下所示:

myl = ['a','b','c','d','e']
我做了如下尝试:

[['a','b'],['c','d'],['e']]
有什么问题吗?

您可以使用以下方法:

print [myl[i:i+2] for i in len(myl)]
对于len中的i(myl)
没有任何意义
len(myl)
只是一个数字,所以您不能遍历它

您可以使用:

>>> myl = ['a','b','c','d','e']
>>> [myl[2*i:2*i+2] for i in range((len(myl) +1)/2)]
[['a', 'b'], ['c', 'd'], ['e']]

>>> myl = ['a','b','c','d','e','f']
>>> [myl[2*i:2*i+2] for i in range((len(myl) +1)/2)]
[['a', 'b'], ['c', 'd'], ['e', 'f']]

>>> myl = ['a','b','c','d','e', 'f', 'g']
>>> [myl[2*i:2*i+2] for i in range((len(myl) +1)/2)]
[['a', 'b'], ['c', 'd'], ['e', 'f'], ['g']]

这里的
range(0,len(myl),2)
表示“给定范围内的每一个数字”,因此
i
取值
0,2,4
,得到
myl[0:2]
myl[2:4]
,和
myl[4:6]
,这正是您想要的:

[myl[i:i+2] for i in range(0,len(myl),2)]
结果:

from itertools import izip_longest
myl = ['a','b','c','d','e']
print list(izip_longest(myl[::2], myl[1::2]))
myl = ['a','b','c','d','e']
l = zip(myl[::2], myl[1::2])
if not len(l)%2:
    l.append((myl[-1],))
print l
下面是另一个解决方案:

[('a', 'b'), ('c', 'd'), ('e', None)]
结果:

from itertools import izip_longest
myl = ['a','b','c','d','e']
print list(izip_longest(myl[::2], myl[1::2]))
myl = ['a','b','c','d','e']
l = zip(myl[::2], myl[1::2])
if not len(l)%2:
    l.append((myl[-1],))
print l

我发现了以下功能的改进版本:

[('a', 'b'), ('c', 'd'), ('e',)]
这其中最棘手的部分是设置
范围
参数以“size”偏移量开始,并以size步长跨过序列。它依赖于Python片段的特性,允许任何大于序列末尾的索引(尽管一些对
max()
的调用在必要时可以绕过这一点)。当我试图用一个从零开始的范围来写这篇文章,并反转索引(从基本索引向前看,而不是向后看),我发现了各种各样的边界错误,而这种“向后”版本并没有表现出来。也许我在这方面太愚蠢了

这是一个旧的、冗长的版本(但适用于任何iterable,即使是那些不能切片的):


我意识到这似乎太冗长了。但是它是健壮的,可以处理任何iterable序列,并且可以将任何正整数概括为一个步长。

列表理解将一次一个字符地遍历名为
myl的字符串。您不能按字符为字符串编制索引(您必须执行一些非常难看的操作,如:[myl[myl.index(i):myl.index(i)+1]……这将在字符串末尾中断,并且对任何具有重复字符的字符串无效。用户试图添加注释作为编辑:此外,还要记住,距离函数不包括最后一个元素本身。例如,如果我说范围(0,LeN(Myl),2),那么它不会考虑直到LeN(MYL),而是直到LeN(MYL)-