0

我有一个类似的清单

myl = ['A','B','C','D','E','F'] #length always even

现在我想要的输出是'AB','CD','EF'

我试过了

>>> myl = ['A','B','C','D','E','F']
>>> even_pos = myl[::2]
>>> odd_pos = myl[::-2]
>>> odd_pos.reverse()
>>> newlist = zip(even_pos,odd_pos)
>>> for x in newlist:
...     print "".join(list(x))
...
...
AB
CD
EF
>>>

我不喜欢这种方式,因为我认为这太过分了。

那么,有没有更好的方法来实现我的输出。

4

5 回答 5

4

您可以使用列表推导式或生成器表达式简洁地做到这一点:

>>> myl = ['A','B','C','D','E','F']
>>> [''.join(myl[i:i+2]) for i in range(0, len(myl), 2)]
['AB', 'CD', 'EF']
>>> print '\n'.join(''.join(myl[i:i+2]) for i in range(0, len(myl), 2))
AB
CD
EF

对于这种特殊情况,您可以替换''.join(myl[i:i+2])为,但是当您想要进行三个或更多的组时,使用该方法更容易。myl[i] + myl[i+1]''.join()

或者来自以下文档的替代方案zip()

>>> map(''.join, zip(*[iter(myl)]*2))
['AB', 'CD', 'EF']
于 2012-04-03T21:02:37.037 回答
4

为什么你的方法这么复杂?你基本上可以做你所做的,但是在一行中,像这样:

[ "".join(t) for t in zip(myl[::2], myl[1::2]) ]

FJ的回答虽然更有效率。

于 2012-04-03T21:06:19.340 回答
1

这个怎么样?

>>> ["%s%s" % (myl[c], myl[c+1]) for c in range(0, 6, 2)]
['AB', 'CD', 'EF']
于 2012-04-03T21:04:55.460 回答
1

我可能会写:

[myl[i] + myl[i + 1] for i in xrange(len(myl), step=2)]
于 2012-04-03T21:07:11.373 回答
0

你可以这样做:

myl = ['A','B','C','D','E','F']
[''.join(myl[i:i+2]) for i in range(0, len(myl), 2)]
print '\n'.join(''.join(myl[i:i+2]) for i in range(0, len(myl), 2))
于 2020-06-17T20:47:53.870 回答