查找字符串中字符的所有位置

2024-02-17

我正在尝试使用非常基本的技能集查找 python 字符串中字符的所有索引号。例如,如果我有字符串“Apples are Excellent”,并且我想找到字符串中“a”所在的位置。 我理想的输出是:

0
7
14
19

这些是字符串中出现“a”的所有位置(我认为)

这是我到目前为止的代码:

sentence = input("Input a string: ")
for ch in sentence:
    x = sentence.find('o')


print(x)

在这里我正在寻找“o”而不是“a”。我的思考过程是,对于字符串中的每个字符,查找函数将返回“o”的位置。因为我不知道输入字符串一定有多长,所以我使用了 for 循环。我能够找到并打印出“o”的第一个实例,但不是全部。我应该怎么办?提前致谢!


Using enumerate是标准的方法。虽然,您可以利用速度str.find用于时间关键的操作。

Code

def find_all(s, c):
    idx = s.find(c)
    while idx != -1:
        yield idx
        idx = s.find(c, idx + 1)

print(*find_all('Apples are totally awesome', 'o')) # 12 23

为了优雅并考虑非常大的字符串,我将上面的返回生成器。当然可以把它投射到list如果需要的话。

基准

这是针对使用解决方案的基准enumerate和列表理解。两种解决方案都具有线性时间复杂度,但是str.find明显更快。

import timeit

def find_all_enumerate(s, c):
    return [i for i, x in enumerate(s) if c == x]

print(
    'find_all:',
    timeit.timeit("list(find_all('Apples are totally awesome', 'o'))",
                  setup="from __main__ import find_all")
)

print(
    'find_all_enumerate:',
    timeit.timeit("find_all_enumerate('Apples are totally awesome', 'o')",
                  setup="from __main__ import find_all_enumerate")
)

Output

find_all: 1.1554179692960915
find_all_enumerate: 1.9171753468076869
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找字符串中字符的所有位置 的相关文章

随机推荐

  • Rebar3 + Cowboy 内核 PID 终止

    我安装了rebar3并创建了一个新版本 cd apps rebar3 new release tunnel Then 我复制了我的src文件来自 tunnel src to apps tunnel src 我遇到了编译错误rebar3 ru
  • 单个正在运行的 R Shiny 应用程序的多个会话之间的交互

    我想构建一个 R Shiny 应用程序 能够将信息从一个正在运行的实例传递到其他可能正在运行的实例 到目前为止 我还没有发现任何可以帮助我解决这个问题的东西 我希望能够正确地做到这一点 而不是诉诸全局变量和 或写入文件等 我在下面的示例中使
  • 表单上所有元素的公共事件

    我想每当表单中任何元素的值发生变化时触发一个公共事件 根据表单元素的值 我想要实现代码 我正在编写下面的代码 但是 onchange 事件在 formid 上不起作用 formid change function code or this
  • 将 ReactforwardRef 与 Redux connect 结合使用

    我有一个正在使用的 React 功能组件forwardRef像这样 const wrapper React forwardRef props ref gt
  • Gradle - Android - 在应用程序审核中导致编译错误 - 放大旧依赖项

    我正在尝试集成 In App Review 但收到此编译错误 Duplicate class com google android play core common IntentSenderForResultStarter found in
  • 如何获取电脑的ID?

    vb net或java中有没有代码可以获取计算机的ID gt gt 我想编写一个可以获取计算机ID的程序 以便像微软那样制作软件许可证 提前致谢 Makara 首先 微软许可不是这样运作的 他们有一把在他们这边生成的钥匙 当他们向您出售该软
  • 如何在其自身事件中释放控件?

    我有一个清单TPanels在 FMX 应用程序中 如果我单击面板 我想释放它 直接在 Onclick 处理程序中释放它们不是正确的方法 因为我遇到了访问冲突 我不想使用windowsmessages 推荐于如何释放其事件处理程序内部的控制权
  • Python 3 中的整数除法 - 带有负数的奇怪结果[重复]

    这个问题在这里已经有答案了 我是Python新手 现在正在学习运算符 我明白 The 运算符用于floating point division and for integer division Example 7 3 2 And 7 3 3
  • 如何从十六进制值识别编码?

    我的网站上有这样显示的文本 o 代替 我从 CMS 中提取了文本并分析了它的十六进制值 正确显示的 有c3 b6 UTF 8 显示不正确的 有6f cc 88 我无法找出这是什么编码 识别编码的好方法是什么 6F是 o 的 UTF 8 AS
  • git中删除多个远程分支

    我有一位团队成员无意中将超过 150 个当地分支机构推送到我们的中央存储库 值得庆幸的是 它们都有相同的前缀 使用该前缀 是否有一个 git 命令或很酷的小 shell 脚本我可以使用它来一次删除所有这些 使用以下命令删除所有分支PREFI
  • 片段间通信适用于嵌套片段吗?

    Android 开发者网站有一个很棒的文章 http developer android com training basics fragments communicating html关于如何使用接口进行通信 A Fragment及其托管
  • 将照片从 Android 应用上传到 Google Cloud Storage/App Engine - 非法字符“_”

    我在将照片从 Android 应用程序上传到 GCS 时遇到问题 我可以上传文本文件 但不能上传照片 我尝试过各种 mime 类型以及不同的 Base64 编码方法 decodeBase64 encodeBase64URLSafeStrin
  • Asp.net Core 2.0 与 .net Framework 4.6.1 - 找不到参考程序集 '.NETFramework/v4.6.1/Microsoft.CSharp.dll

    我最近将我的项目从asp net core 1 1升级到asp net core 2 0 并使用 Net Framework 4 6 1 来应用我们 应用程序在本地开发计算机上按预期工作 但是一旦使用 dotnetpublish 命令部署到
  • C# lambda 如何捕获变量

    为什么下面的代码会打印 11 两次 int i 10 Action fn1 gt Console WriteLine i i 11 Action fn2 gt Console WriteLine i fn1 fn2 输出 11 11 根据这
  • 无法生成时间戳:连接重置

    编译 adobe air 应用程序时出现以下错误 java Could not generate timestamp Connection reset 该应用程序几天前编译得很好 我不知道计算机的配置有任何变化 我将以下参数添加到 buil
  • Android BroadcastReceiver onReceive() 在 android 5.1.1 上调用两次,即使在一次注册之后

    我无法弄清楚下面的代码有什么问题 我还检查了两次注册接收者的情况 但事实也并非如此 或者可能是我遗漏了一些东西 请帮忙 我真的很需要它 import android app Service import android content Br
  • 如何使用php数组将sql查询结果转换为数据透视表?

    我正在尝试为图书馆预订系统创建一些统计数据 我的 sql 查询的结果类似于以下结构 total no students department property month 241 Physics undergraduate Nov 236
  • bash 提示符换行损坏

    我正在 OsX 上自定义 bash 提示符 以包含 git 分支以及分支状态的一些标记 这会打破换行 我知道我必须添加 和 来防止这个问题 https stackoverflow com questions 105349 bash prom
  • jquery:秒表

    我正在使用stopwatch我在这里找到的代码 http www kellishaver com projects stopwatch http www kellishaver com projects stopwatch function
  • 查找字符串中字符的所有位置

    我正在尝试使用非常基本的技能集查找 python 字符串中字符的所有索引号 例如 如果我有字符串 Apples are Excellent 并且我想找到字符串中 a 所在的位置 我理想的输出是 0 7 14 19 这些是字符串中出现 a 的