プロが教えるわが家の防犯対策術!

Pythonでリストの要素の順番を入れ替え、結合したい

以下のようなリスト(入力list)があります。"1"もしくは"2"が出てきたら、それぞれ次の要素と順番を入れ替え、かつ1つの要素に結合するスクリプトを書きたいのですが、案はありますでしょうか。以下の出力listのような出力を望んでいます。

入力 list=['a', 'b', '1', 'c', 'd', 'e', '2', 'f', '2', 'g']
出力 list=['a', 'b', 'c1', 'd', 'e', 'f2', 'g2']

1や2が出てくる回数はリストにより異なり、また1より2の方が先に出てくる場合もあります。またリストによっては1がない場合、2がない場合もあります。(ただし '1', '2' のように1と2が連続で出てくることはありません。かならず間に別の要素が入ります)

indexを使って要素の順番の入れ替えはできるようなのですが、最初に出てきたものしかとらえないので、例えば上の例でいうと2,gがg2に変換されません。また結合もできていませんが、indexを使った入れ替え方法を一応以下に記しておきます:

i=list.index("1")
j=list.index("2")
list[i],list[i+1]=list[i+1],list[i]
list[j],list[j+1]=list[j+1],list[j]

とすると、出力リストは['a', 'b', 'c', '1', 'd', 'e', 'f', '2', '2', 'g']となります。
(最後のg2が変換できていない。また結合もできていない)

Python初心者です。よろしくお願いします。

A 回答 (1件)

#スペース削除対策で スペースを_で表わしている


#使用する際にはスペースに置換すること

i=0
#"1","2"が最後にくることはないので、len(list)-1までの範囲で調べる
while ( i < len(list) - 1 ) :
____# 要素が"1"か"2"か調べる。
____if list[i] == "1" or list[i] == "2":
________# 次の要素と入れかえて結合した文字列list[i+1] + list[i]
________# を 現在の要素の値にする
________list[i] = list[i+1] + list[i]
________#次の要素は不要なので削除する
________del list[i+1]
____i += 1

入れ替えるとか結合するとかをちょっと難しく考えすぎてしまったのではないでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます!!
そんなに簡単にできたのですね。確かに難しく考えすぎていたかもしれません。
何時間も頭をひねっていたので、ものすごいすっきり感です。

お礼日時:2010/04/04 22:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!