我有一个类别列表:
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方法可以解决问题吗?
答案 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:]]]