当达到大写单词时,Python将列表拆分为多个较短的列表

时间:2017-07-18 00:40:09

标签: python list

我希望能够在达到大写单词时拆分项目列表,例如:

输入:

s = ['HARRIS', 'second', 'caught', 'JONES', 'third', 'Smith', 'stole', 'third']

输出:

['HARRIS', 'second', 'caught']
['JONES', 'third']
['Smith', 'stole', 'third']

最好是使用s.index('一些正则表达式')解决这个问题,然后在给定的索引处相应地拆分列表?

4 个答案:

答案 0 :(得分:2)

你可以试试这个:

s = ['HARRIS', 'second', 'caught', 'JONES', 'third', 'Smith', 'stole', 'third']

indices = [i for i, a in enumerate(s) if a[0].isupper()]

indices.append(len(s))

final_list = [s[indices[i]:indices[i+1]] for i in range(len(indices)-1)]

输出:

[['HARRIS', 'second', 'caught'], ['JONES', 'third'], ['Smith', 'stole', 'third']]

请注意,此解决方案仅在某个元素中的第一个字母为大写时才有效。

如果您想要一个可以大写任何字母的解决方案:

s = ['HARRIS', 'second', 'caught', 'JONES', 'third', 'Smith', 'stole', 'third']

indices = [i for i, a in enumerate(s) if any(b.isupper() for b in a)]

indices.append(len(s))

final_list = [s[indices[i]:indices[i+1]] for i in range(len(indices)-1)]

答案 1 :(得分:0)

直接的方法是枚举列表,在创建资本时,我们开始一个新的列表,否则追加。

s = ['HARRIS', 'second', 'caught', 'JONES', 'third', 'Smith', 'stole', 'third', 'H']

def split_by(lst, p):
    lsts = []
    for x in lst:
        if p(x):
            lsts.append([x])
        else:
            lsts[-1].append(x)
    return lsts

print(split_by(s, str.isupper))

答案 2 :(得分:0)

如果您愿意使用第三方库,可以使用iteration_utilities.Iterable轻松完成此操作:

>>> from iteration_utilities import Iterable
>>> 
>>> lst = ['HARRIS', 'second', 'caught', 'JONES', 'third', 'Smith', 'stole', 'third']
>>> Iterable(lst).split(str.isupper, keep_after=True).filter(lambda l: l).as_list()
[['HARRIS', 'second', 'caught'], ['JONES', 'third', 'Smith', 'stole', 'third']]

答案 3 :(得分:0)

str.istitle("Abc") #True
str.istitle("ABC") #False
str.istitle("ABc") #False

str.isupper("Abc") #False
str.isupper("ABC") #True
str.isupper("ABc") #False

所以我认为它会帮助你Checking if first letter of string is in uppercase

a = "Abc"
print(str.isupper(a[0]))

a = "Abc"
print(a[0].isupper())