整数のリストがある場合
x=[0, 0, 119, 101, 108, 108, 99, 111, 109]
左から2要素切り出したい
x=[119, 101, 108, 108, 99, 111, 109]
何をすればよいでしょうか ?
Python のスライス表記を使用します。
>>> x = [0, 0, 119, 101, 108, 108, 99, 111, 109]
>>> x = x[2:]
>>> x
[119, 101, 108, 108, 99, 111, 109]
これは、3 番目の項目からリストの最後までのすべての要素を取得し、x
その値を作成するだけです。
ネインネインネイン
申し訳ありませんが、必要のない再割り当てが実行されるため、Haidro のソリューションは適切ではないと思います。
見る:
x = [0, 0, 119, 101, 108, 108, 99, 111, 109]
print id(x)
x = x[2:]
print id(x)
print
y = [0, 0, 119, 101, 108, 108, 99, 111, 109, 1003]
print id(y)
y[:2] = []
print id(y)
結果
18713576
18739528
18711736
18711736
x = x[2:]
問題を引き起こす例を示します。
x = [0, 0, 119, 101, 108, 108, 99, 111, 109, 1003]
print id(x),x
gen = ((i,a+100) for i,a in enumerate(x))
for u in xrange(4):
print '%d %d' % gen.next()
x = x[2:]
print 'x = x[2:]\n',id(x),x
for u in xrange(4):
print '%d %d' % gen.next()
print '--------------------------'
y = [0, 0, 119, 101, 108, 108, 99, 111, 109, 1003]
print id(y),y
gen = ((i,b+100) for i,b in enumerate(y))
for u in xrange(4):
print '%d %d' % gen.next()
y[:2] = []
print 'y[:2] = []\n',id(y),y
for u in xrange(4):
print '%d %d' % gen.next()
結果
18713576 [0, 0, 119, 101, 108, 108, 99, 111, 109, 1003]
0 100
1 100
2 219
3 201
x = x[2:]
18711736 [119, 101, 108, 108, 99, 111, 109, 1003]
4 208
5 208
6 199
7 211
--------------------------
18740128 [0, 0, 119, 101, 108, 108, 99, 111, 109, 1003]
0 100
1 100
2 219
3 201
y[:2] = []
18740128 [119, 101, 108, 108, 99, 111, 109, 1003]
4 199
5 211
6 209
7 1103
最初のケース ( x = x[2:] ) では、x
別のオブジェクトに再割り当てされます。ただし、再割り当ての前に作成されたジェネレーターは、同じリスト オブジェクトを使用して要素を生成します。これは、特定のコードで問題になる場合があります。
しかし、他のケースでは他のコードも問題になる可能性があることは事実です。
私が言いたいx = x[2:]
のは、絶対に問題を引き起こすことから保護されていないということです.
z[:] = z[2:]
とは著しく異なりy[:2] = []
ます:
import dis
print 'y[:2] = []'
def f(z):
y[:2] = []
dis.dis(f)
print '====================='
print 'z[:] = z[2:]'
def f(z):
z[:] = z[2:]
dis.dis(f)
結果
y[:2] = []
7 0 BUILD_LIST 0
3 LOAD_GLOBAL 0 (y)
6 LOAD_CONST 1 (2)
9 STORE_SLICE+2
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
=====================
z[:] = z[2:]
12 0 LOAD_FAST 0 (z)
3 LOAD_CONST 1 (2)
6 SLICE+1
7 LOAD_FAST 0 (z)
10 STORE_SLICE+0
11 LOAD_CONST 0 (None)
14 RETURN_VALUE