字符串拆分逻辑问题:如何从路径式字符串提取连续子路径
嘿,我明白你遇到的麻烦了!针对你输入的denver/tulsa/dallas/这种路径字符串,要提取相邻的两段组合(比如denver/tulsa和tulsa/dallas),其实不用纠结手动统计斜杠然后找起始位置,有更直观的方法,也可以实现你最初的思路,我给你两种方案参考:
方案一:分割后组合(推荐)
这种方法更简洁易读,先把字符串拆成独立的城市列表,再遍历生成相邻两段的组合:
input_str = "denver/tulsa/dallas/" # 按斜杠分割字符串,同时过滤掉末尾斜杠产生的空字符串 cities = [city for city in input_str.split('/') if city] # 遍历列表,拼接相邻的两个城市 result = [f"{cities[i]}/{cities[i+1]}" for i in range(len(cities)-1)] print(result) # 输出结果:['denver/tulsa', 'tulsa/dallas']
原理说明
split('/')会把输入字符串拆成['denver', 'tulsa', 'dallas', ''],通过列表推导式if city过滤掉空元素,得到干净的城市列表['denver', 'tulsa', 'dallas']- 循环遍历列表的索引(从0到倒数第二个元素),将当前元素和下一个元素用斜杠拼接,就能得到所有相邻的路径段
方案二:手动截取实现你的初始思路
如果你想坚持用“统计斜杠+截取”的思路,也可以通过每次更新起始位置来实现迭代:
input_str = "denver/tulsa/dallas/" start_pos = 0 while True: # 找到第一个斜杠的位置(从当前起始点开始找) first_slash = input_str.find('/', start_pos) if first_slash == -1: break # 没有斜杠就退出循环 # 找到第二个斜杠的位置(从第一个斜杠的下一位开始找) second_slash = input_str.find('/', first_slash + 1) if second_slash == -1: break # 找不到第二个斜杠就退出 # 截取从起始位置到第二个斜杠前的部分 current_segment = input_str[start_pos:second_slash] print(current_segment) # 依次输出 denver/tulsa、tulsa/dallas # 更新起始位置为第一个斜杠的下一位,也就是下一个城市的开头 start_pos = first_slash + 1
原理说明
每次截取完一段后,把start_pos设为第一个斜杠的下一位(也就是tulsa的首字母t的位置),这样下一次循环就会从这个位置开始查找斜杠,自然就能得到tulsa/dallas这段了。
内容的提问来源于stack exchange,提问作者zavier
相关产品推荐
相关产品推荐

