根据首字母字符的索引来修剪字符串

时间:2019-04-11 17:52:27

标签: python

我有一个类别列表:

categories = [
    '01-1 Category 1',
    '01-2 Category with a lot of spaces between words',
    '01   Only one code category',
    '02 1 Two codes category'
]

任务是切断类别代码,并仅保留类别名称。因此输出应为:

# pprint.pprint(output_list)

['Category 1',
 'Category with a lot of spaces between words',
 'Only one code category',
 'Two codes category']

我解决了:

for category in categories:
    letter_index = 0

    for char in category:  # find index of first letter
        if char.isalpha():
            break

        letter_index += 1

    output.append(category[letter_index:])

似乎解决方案看起来像C风格。有更多的pythonic方法可以解决问题吗?

3 个答案:

答案 0 :(得分:2)

您可以使用列表推导进行循环,并使用字符串的lstrip()方法去除数字字符,连字符和空格。

categories[:] = [category.lstrip("0123456789- ") for category in categories]

答案 1 :(得分:1)

我编写了以下代码,与您的原始代码等效,但更为简洁。

categories = [
    '01-1 Category 1',
    '01-2 Category with a lot of spaces between words',
    '01   Only one code category',
    '02 1 Two codes category'
]
def trim(x):
    return ''.join(x[[i.isalpha() for i in x].index(True):])
output = [trim(i) for i in categories]
print(output)

输出:

['Category 1', 'Category with a lot of spaces between words', 'Only one code category', 'Two codes category']

说明:我使用了所谓的list理解。在函数trim中,我正在创建布尔值列表,然后获取第一个True的索引(请注意,要正常工作,我的方法需要不少于1个字符,每个{{1} },然后相应地对其进行切片。我还使用列表推导来获取str。要从字符列表中获取output,需要''.join

答案 2 :(得分:0)

使用它。

print([对于类别中的i,为[i [5:]]]