python检索字符串_Python:在字符串中查找子字符串并返回该子字符串的索引

Python:在字符串中查找子字符串并返回该子字符串的索引

我有:

功能:"py"

和一个字符串:"py",

我本质上想输入"py"并返回3,但我一直在获取2来返回。

码:

def find_str(s, char):

index = 0

if char in s:

char = char[0]

for ch in s:

if ch in s:

index += 1

if ch == char:

return index

else:

return -1

print(find_str("Happy birthday", "py"))

不知道怎么了!

5个解决方案

176 votes

在字符串对象上有一个内置方法可以在python中做到这一点,您知道吗?

s = "Happy Birthday"

s2 = "py"

print s.find(s2)

Python是一种“电池包含的语言”,其中编写的代码可以完成大多数您想要的(无论您想要什么)..除非这是家庭作业:)

编辑:find如果找不到字符串,则返回-1。

demented hedgehog answered 2020-01-16T19:01:30Z

14 votes

理想情况下,您会像痴呆的刺猬说的那样使用str.find或str.index。 但是你说你不能...

您的问题是您的代码仅搜索搜索字符串的第一个字符(第一个字符在索引2)。

您基本上是在说char[0]是否在s中,请递增index直到ch == char[0],在我测试时返回3,但仍然错误。 这是一种方法。

def find_str(s, char):

index = 0

if char in s:

c = char[0]

for ch in s:

if ch == c:

if s[index:index+len(char)] == char:

return index

index += 1

return -1

print(find_str("Happy birthday", "py"))

print(find_str("Happy birthday", "rth"))

print(find_str("Happy birthday", "rh"))

它产生了以下输出:

3

8

-1

Eric Fortin answered 2020-01-16T19:01:01Z

1 votes

晚到聚会,正在搜索相同的内容,因为“中”无效,我刚刚创建了以下内容。

def find_str(full, sub):

index = 0

sub_index = 0

position = -1

for ch_i,ch_f in enumerate(full) :

if ch_f.lower() != sub[sub_index].lower():

position = -1

sub_index = 0

if ch_f.lower() == sub[sub_index].lower():

if sub_index == 0 :

position = ch_i

if (len(sub) - 1) <= sub_index :

break

else:

sub_index += 1

return position

print(find_str("Happy birthday", "py"))

print(find_str("Happy birthday", "rth"))

print(find_str("Happy birthday", "rh"))

产生

3

8

-1

如果不需要区分大小写,请删除lower()。

Parth answered 2020-01-16T19:01:59Z

1 votes

在使用find()的@demented刺猬上添加答案

在效率方面

在调用find()之前,可能值得首先检查s1是否在s2中。

如果您知道大多数情况下s1不会是s2的子字符串,这可能会更有效率

由于find()操作员非常高效

s1 in s2

转换效率更高:

index = s2.find(s1)

index = -1

if s1 in s2:

index = s2.find(s1)

当find()将返回-1时,这很有用。

我发现它的速度要快得多,因为在我的算法中多次调用find(),所以我认为值得一提

Jerry answered 2020-01-16T19:02:55Z

0 votes

没有直接回答问题,但是最近我遇到了一个类似的问题,我被问到要计算给定字符串中子字符串重复的次数。 这是我写的函数:

def count_substring(string, sub_string):

cnt = 0

len_ss = len(sub_string)

for i in range(len(string) - len_ss + 1):

if string[i:i+len_ss] == sub_string:

cnt += 1

return cnt

find()函数可能仅返回第一个事件的索引。 存储索引来代替仅计数,可以为我们提供子字符串在字符串中重复的独特索引集。

免责声明:我是Python编程的“新手”。

Anshul answered 2020-01-16T19:03:24Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值