我有一个像
这样的清单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
>>>
我不喜欢这种方式,因为我觉得这太过分了。
那么,有没有更好的方法来实现我的输出。
答案 0 :(得分: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']
答案 1 :(得分:3)
为什么你的方法如此复杂?你基本上可以做你所做的,但是在一行中,就像这样:
[ "".join(t) for t in zip(myl[::2], myl[1::2]) ]
F.J的回答更有效率。
答案 2 :(得分:1)
这个怎么样?
>>> ["%s%s" % (myl[c], myl[c+1]) for c in range(0, 6, 2)]
['AB', 'CD', 'EF']
答案 3 :(得分:1)
我可能会写:
[myl[i] + myl[i + 1] for i in xrange(len(myl), step=2)]
答案 4 :(得分: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))