python中是否有一种简单的方法可以从字符串列表中创建子字符串列表?
例子:
原名单:['abcd','efgh','ijkl','mnop']
子字符串列表:['bc','fg','jk','no']
我知道这可以通过一个简单的循环来实现,但是在 python 中有没有更简单的方法(也许是单线)?
使用slicing
和list 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'
通过混合切片和列表理解,您可以这样做
listy = ['abcd','efgh','ijkl','mnop']
[item[1:3] for item in listy]
>> ['bc', 'fg', 'jk', 'no']
您可以使用单行列表理解。
使用slicing和 relative 位置,您可以修剪每个项目中的第一个和最后一个字符。
>>> 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']
如果您想在一行中执行此操作,可以尝试以下操作:
>>> map(lambda s: s[1:-1], ['abcd','efgh','ijkl','mnop'])