次のようなリストがあるとします:
[a, b, c, d, e, f, g]
このリストを次のように変更するにはどうすればよいですか?
[a, b, c, def, g]
新しいリストを作成するのではなく、既存のリストを直接変更することをお勧めします。
どのような基準でマージを行う必要がありますか?あなたの質問はかなりあいまいです。また、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']
シーケンスタイプ 、特に 可変シーケンスタイプ に関するドキュメントを参照してください。そしておそらく stringメソッド でも。
その例はかなりあいまいですが、おそらくこのようなものですか?
items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
items[3:6] = [''.join(items[3:6])]
基本的にスプライス(または スライスへの割り当て )操作を行います。アイテム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])]
ただのバリエーション
alist=["a", "b", "c", "d", "e", 0, "g"]
alist[3:6] = [''.join(map(str,alist[3:6]))]
print alist
私のテレパシー能力は特に優れているわけではありませんが、ここにあなたが望むと思うものがあります:
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
明らかではないかもしれないので、他の回答で提案されているものと同じではないことに注意してください。
もちろん、@ Stephan202は本当にいい答えをしてくれました。私は代替手段を提供しています。
def compressx(min_index = 3, max_index = 6, x = ['a', 'b', 'c', 'd', 'e', 'f', 'g']):
x = x[:min_index] + [''.join(x[min_index:max_index])] + x[max_index:]
return x
compressx()
>>>['a', 'b', 'c', 'def', 'g']
次のこともできます。
x = x[:min_index] + [''.join(x[min_index:max_index])] + x[max_index:]
print(x)
>>>['a', 'b', 'c', 'def', 'g']