3

Is there an easy way in python of creating a list of substrings from a list of strings?

Example:

original list: ['abcd','efgh','ijkl','mnop']

list of substrings: ['bc','fg','jk','no']

I know this could be achieved with a simple loop but is there an easier way in python (Maybe a one-liner)?

4

4 に答える 4

3

とを使用slicinglist comprehensionます。

>>> lis = ['abcd','efgh','ijkl','mnop']
>>> [ x[1:3] for x in lis]
['bc', 'fg', 'jk', 'no']

スライス:

>>> s = 'abcd'
>>> s[1:3]      #return sub-string from 1 to 2th index (3 in not inclusive)
'bc'
于 2013-06-26T09:26:05.243 に答える
1

スライシングとリスト内包表記を組み合わせることで、このようにすることができます

listy = ['abcd','efgh','ijkl','mnop']
[item[1:3] for item in listy]
>> ['bc', 'fg', 'jk', 'no']
于 2013-06-26T09:26:58.100 に答える
1

ワンライナーのlist-comprehensionを使用できます。

スライスと相対位置を使用して、各アイテムの最初と最後の文字をトリミングできます。

>>> l = ['abcd','efgh','ijkl','mnop']
>>> [x[1:-1] for x in l]
['bc', 'fg', 'jk', 'no']

これを何度も行う場合は、関数の使用を検討してください。

def trim(string, trim_left=1, trim_right=1):
    return string[trim_left:-trim_right]

def trim_list(lst, trim_left=1, trim_right=1):
    return [trim(x, trim_left, trim_right) for x in lst] 

>>> trim_list(['abcd','efgh','ijkl','mnop'])
['bc', 'fg', 'jk', 'no']
于 2013-06-26T09:28:17.280 に答える
0

これを 1 行で実行したい場合は、次のようにします。

>>> map(lambda s: s[1:-1], ['abcd','efgh','ijkl','mnop'])
于 2013-06-26T09:31:40.147 に答える