2

整数のリストがある場合

    x=[0, 0, 119, 101, 108, 108, 99, 111, 109]

左から2要素切り出したい

    x=[119, 101, 108, 108, 99, 111, 109]

何をすればよいでしょうか ?

4

2 に答える 2

6

Python のスライス表記を使用します。

>>> x = [0, 0, 119, 101, 108, 108, 99, 111, 109]
>>> x = x[2:]
>>> x
[119, 101, 108, 108, 99, 111, 109]

これは、3 番目の項目からリストの最後までのすべての要素を取得し、xその値を作成するだけです。

于 2013-09-21T22:59:32.737 に答える
0

ネインネインネイン

申し訳ありませんが、必要のない再割り当てが実行されるため、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

編集1

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:]のは、絶対に問題を引き起こすことから保護されていないということです.

編集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  
于 2013-09-21T23:17:18.973 に答える