-1

Python では、リストから1 つの項目を削除してから、このリストを新しいリストにマージしたいと考えています。メソッドをチェーンして、これを 1 行で実行できますか?

例えば:

a = [1,2,3,4]
# I want to remove 3 and add [10,11]
a.remove(3) #it doesn't return a, so I can't do this in one line
a += [10,11]
4

4 に答える 4

11

リスト内包表記と連結を使用します。

a = [i for i in a if i != 3] + [10, 11]

これにより、リスト内の の複数のコピーが削除3されます。複数のコピーがあっても最初に出現したものだけを削除したい場合は3、スライスに固執する必要があります。

a = a[:a.index(3)] + a[a.index(3) + 1:] + [10, 11]

ただし、そのインデックスに対して2 回の検索が発生します。データに繰り返しがないことをコメントで述べているため、最初のオプションを使用する必要があります。

于 2013-07-16T14:11:46.337 に答える
1

このように使えますが、

>>>print filter(lambda x: x is not 3, [1,2,3,4]) + [10,11]
[1, 2, 4, 10, 11]
于 2013-07-16T14:22:08.030 に答える
0

削除したい位置なしで配列を分割し、テールを連結できます。

a = [1,2,3,4]
a = a[:2]+a[3:]+[10,11]

したがって、1行で1つの位置を削除できます。

于 2013-07-16T14:17:32.073 に答える
0

別の方法:

a = [1,2,3,4]
new = (lambda b=iter(a): list(iter(b.next, 3)) + list(b) + [10, 11])()
# [1, 2, 4, 10, 11]

それは醜いですが、インデックスルックアップを削除します

于 2013-07-16T14:23:08.153 に答える