1. ホーム
  2. python

Python slice how-to, Pythonのsliceは知っているけど、組み込みのsliceオブジェクトを使うにはどうしたらいいの?

2023-11-17 22:42:48

質問

組み込み関数 slice はどのように使うのですか?

私が知っているPythonicスライスの直接的な方法 - 。 l1[start:stop:step] . 私はスライスオブジェクトを持っている場合、私はそれを使用する方法を知りたいのですが?

どのように解決するのですか?

start:end:step]表記と同じフィールドでsliceを呼び出して、スライスを作成します。

sl = slice(0,4)

スライスを使うには、リストや文字列のインデックスと同じように渡せばよい。

>>> s = "ABCDEFGHIJKL"
>>> sl = slice(0,4)
>>> print(s[sl])
'ABCD'

固定長のテキストフィールドのファイルを持っているとします。 このファイル内の各「quot;record"」から値を簡単に抽出するために、スライスのリストを定義することができます。

data = """\
0010GEORGE JETSON    12345 SPACESHIP ST   HOUSTON       TX
0020WILE E COYOTE    312 ACME BLVD        TUCSON        AZ
0030FRED FLINTSTONE  246 GRANITE LANE     BEDROCK       CA
0040JONNY QUEST      31416 SCIENCE AVE    PALO ALTO     CA""".splitlines()


fieldslices = [slice(*fielddef) for fielddef in [
    (0,4), (4, 21), (21,42), (42,56), (56,58),
    ]]
fields = "id name address city state".split()

for rec in data:
    for field,sl in zip(fields, fieldslices):
        print("{} : {}".format(field, rec[sl]))
    print('')

# or this same code using itemgetter, to make a function that
# extracts all slices from a string into a tuple of values
import operator
rec_reader = operator.itemgetter(*fieldslices)
for rec in data:
    for field, field_value in zip(fields, rec_reader(rec)):
        print("{} : {}".format(field, field_value))
    print('')

印刷します。

id : 0010
name : GEORGE JETSON    
address : 12345 SPACESHIP ST   
city : HOUSTON       
state : TX

id : 0020
name : WILE E COYOTE    
address : 312 ACME BLVD        
city : TUCSON        
state : AZ

id : 0030
name : FRED FLINTSTONE  
address : 246 GRANITE LANE     
city : BEDROCK       
state : CA

id : 0040
name : JONNY QUEST      
address : 31416 SCIENCE AVE    
city : PALO ALTO     
state : CA