从字符串列表中创建新的子字符串列表

时间:2013-06-26 09:24:39

标签: python list substring

在python中有一种从字符串列表创建子串列表的简单方法吗?

示例:

原始列表:['abcd','efgh','ijkl','mnop']

子串列表:['bc','fg','jk','no']

我知道这可以通过一个简单的循环来实现,但在python中是否有更简单的方法(也许是一个单行)?

4 个答案:

答案 0 :(得分: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'

答案 1 :(得分:1)

通过混合切片和列表推导,您可以像这样做

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

答案 2 :(得分:1)

您可以使用单行list-comprehension

使用slicing和相对位置,您可以修剪每个项目中的第一个和最后一个字符。

>>> 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']

答案 3 :(得分:0)

如果您想在一行中执行此操作,可以尝试:

>>> map(lambda s: s[1:-1], ['abcd','efgh','ijkl','mnop'])
相关问题