リスト x = [1,2,3] があり、インデックス付きの値以外のすべての値を出力したいとします。使用できるリスト操作はありますか? 例: x[0]=> [2,3] 、x[1] => [1,3]、x[2] =>[1,2] ?
7 に答える
あなたはこれを使うことができます:
def exclude(l, e):
return [v for i, v in enumerate(l) if i != e]
>>> exclude(range(10), 3)
[0, 1, 2, 4, 5, 6, 7, 8, 9]
あなたはスライスでそれをすることができます、しかし私は試みたくなります:
a = [1, 2, 3]
b = a[:]
del b[1]
編集
上記は「技術的に」スライス操作を使用します。これはlist
、実際には浅いコピーであるオブジェクトに対して発生します。
より柔軟で、欠点がないはずのことは、次を使用することです。
a = [1, 2, 3]
b = list(a)
del b[1]
組み込みのリストは任意の反復可能で機能するため(スライス操作[:]
はリストまたはインデックス可能なリストで機能します)、次のような構成に拡張することもできます。
>>> a = '123'
>>> b = list(a)
>>> del b[0]
>>> ''.join(b)
'23'
使用できますx[:i] + x[i+1:]
:
In [8]: x = [1, 2, 3]
In [9]: i = 0
In [10]: x[:i] + x[i+1:]
Out[10]: [2, 3]
コンテキストによっては、x.pop(i)
役立つ場合もあります。要素を削除して返すことにより、リストを適切に変更しi-th
ます。要素が必要ない場合はdel x[i]
、オプションもあります。
>>> x = [1, 2, 3]
>>> x[:1] + x[2:]
[1, 3]
my_list = [1, 2, 3]
my_list.remove(my_list[_index_]) #_index_ is the index you want to remove
そのようなもの: my_list.remove(my_list[0])
would yield [2, 3]
,
my_list.remove(my_list[1])
would yield [0, 3]
, and
my_list.remove(my_list[2])
would yield [1, 2]
.
したがって、インデックス付きの値を除くすべての値が必要です。ここで、i はインデックスです。
>>> list = [1,2,3,4,5,6,7,8]
>>> [x for x in list if not x == list[i]]
これにより、 it 要素のインスタンスがないリストが得られます。たとえば、次のようになります。
>>> i = 2
>>> list = [1,2,3,4,5,6,7,1,2,3,4,5,6,7]
>>> [x for x in list if not x == list[i]]
[1, 2, 4, 5, 6, 7, 1, 2, 4, 5, 6, 7]
3 がそのリストにまったく含まれていないことに注意してください。
お互いが
x[::2], start at 0
x[1::2], start at 1