2009-07-17 5 views
19

におけるいくつかのリスト項目をマージ私はこのようなリストを持っていると言う:はPythonのリスト

[a, b, c, d, e, f, g] 

それはこのようになりますように、そのリストを変更するにはどうすればよいですか?

[a, b, c, def, g] 

新しいリストを作成せずに、既存のリストを直接変更することをお勧めします。

+1

マージは場所を取る必要がありますか? – Stephan202

+2

a、bなど(つまり、どのデータ型)ですか?現状では、これをPythonインタプリタに入力すると、バインドされていない名前なのでエラーになります。 –

+0

リスト内のこれらのアイテムを常に連結したい場合、または後でどこを選択できるようにしたいのですか。 – tgray

答えて

27

この例はかなり曖昧ですが、このようなものでしょうか?

items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] 
items[3:6] = [''.join(items[3:6])] 

それは基本的にスプライス(またはassignment to a slice)操作を行います。アイテム3〜6を削除し、その場所に新しいリストを挿入します(この場合、削除された3つのアイテムの連結である1​​つのアイテムのリスト)。

どのタイプのリストでも、この(関係なく自分のタイプが何であるか、すべての項目の+演算子を使用していない):

items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] 
items[3:6] = [reduce(lambda x, y: x + y, items[3:6])] 

これは基本的に+演算子を使用して一緒にアイテムを追加しますlambda機能をreduce機能を利用します。

+0

これは文字列のリストに適しています。要素が文字列でない場合は、 '' .join()以外のものを使う必要があります。 – tgray

+0

あなたは正しいですが、私は 'reduce'を使って' + 'オペレーター。私は、OPが彼の質問に拡大しない限り、それ以上のことはできません。 – Blixt

+0

彼の質問は文字列以外のものには意味がありません。 –

37

マージはどのような基準で行われますか?あなたの質問はむしろあいまいです。また、a、b、...、fは文字列、つまり 'a'、 'b'、...、 'f'であると仮定します。

>>> x = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] 
>>> x[3:6] = [''.join(x[3:6])] 
>>> x 
['a', 'b', 'c', 'def', 'g'] 

特にmutable sequence typesに、sequence types上のドキュメントを参照してください。そしておそらくstring methodsにも。

0

私のテレパシー能力は特に素晴らしいではありませんが、ここで私はあなたが欲しいと思うものです:

def merge(list_of_strings, indices): 
    list_of_strings[indices[0]] = ''.join(list_of_strings[i] for i in indices) 
    list_of_strings = [s for i, s in enumerate(list_of_strings) if i not in indices[1:]] 
    return list_of_strings 

私は注意してください、それはそれは他で提案されているものと同じではないことは明らかではないかもしれないので、答え。

4

は何に基づいてちょうど変動

alist=["a", "b", "c", "d", "e", 0, "g"] 
alist[3:6] = [''.join(map(str,alist[3:6]))] 
print alist