我试图找出子字符串(“xyz”)是否在字符串中,如果在字符串左侧的索引中有“.”。如果子字符串前面有句点,则不计数,如果子字符串出现时没有句点,则返回true。在
我首先检查子字符串是否在字符串中,如果出现子字符串,则附加子字符串的索引。然后我遍历这个列表,检查索引1是否为“.”,如果是,则删除索引。如果列表中还有什么,我就返回True,因为条件会满足。在
我不能导入任何模块,因为这是竞争的一部分,所以没有正则表达式。在
以下是我目前所掌握的情况:
def xyz_there(a_str):
#Finds all indexes that xyz starts at
indexes=[i for i in range(len(a_str)) if a_str.startswith("xyz", i)]
#Check if sub not in string or string too short
if len(a_str)<3 or "xyz" not in a_str:
return False
#Iterate through indexes, check for preceding "."
for i in indexes:
if a_str[i-1] == ".":
indexes.remove(i)
if len(indexes)>0:
return True
else:
return False
它在大多数情况下都很好,但使用此测试时存在一个问题:
^{pr2}$给定子字符串的3个实例,它会在第一个和第三个实例中找到句点,但不会在第二个实例中找到句点,我不明白为什么它会跳过这一个。在
单行解决方案如果要使用列表压缩,也可以使用过滤器:
第一个问题是使用}。它不会移除该位置的元素。要想做什么,您需要使用
indexes.remove(i)
。indexes.remove(i)
删除indexes
中第一个出现的{indexes.pop(i)
。另外,在完成之前,您正在检查indexes
的长度。你需要把这些线去掉:您可以将
if
-else
行替换为return len(indexes) > 0
使用^{} 怎么样:
和示例用法:
^{pr2}$输出:
相关问题 更多 >
编程相关推荐