我希望能够在达到大写单词时拆分项目列表,例如:
输入:
s = ['HARRIS', 'second', 'caught', 'JONES', 'third', 'Smith', 'stole', 'third']
输出:
['HARRIS', 'second', 'caught']
['JONES', 'third']
['Smith', 'stole', 'third']
最好是使用s.index('一些正则表达式')解决这个问题,然后在给定的索引处相应地拆分列表?
答案 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())