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

この特定のケースではに置き換えることができますが、3つ以上のグループを実行する場合は、この方法を使用する''.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

なぜあなたの方法はとても複雑なのですか?基本的には自分がしたことを行うことができますが、1行で次のようになります。

[ "".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 に答える