【问题标题】:Python: Most Efficient Way to Split and Analyze StringPython:拆分和分析字符串的最有效方法
【发布时间】:2015-08-03 17:19:31
【问题描述】:

我从其他答案中知道,在 Regex 上使用 string.split() 会更快地使用短字符串。我正在处理的一个特定脚本要求我在分隔符上拆分一个字符串,并根据它之后的分隔符以特定方式分析每个拆分。例如,我的字符串可能看起来像 abd-123-32-few-333-1212 等......在这种情况下,分隔符是“-”。根据情况,我将需要几个或全部拆分(也就是,对于这个例子,我可能需要 32 和 333,我需要知道 32 在第二个破折号之后,33 在第四个破折号之后) .

我当前的解决方案是在分隔符上拆分,然后遍历该列表以获取我需要的值。我很好奇的是是否有更好/更快的方法来做到这一点。我已经确认 Regex 速度较慢并且不能立即满足我的需求...还有其他建议吗?

【问题讨论】:

  • 那么你需要的是每个分割部分的索引?
  • I may need 32 and 333 and I will need to know that the 32 is after the 2nd dash and the 33 after the 4th). 所以你想检查第 4 部分中是否存在 33?
  • 我回复了您的回答 Avinash。简而言之,我需要找到分隔符之间的某个值,然后我需要知道它在什么位置。很抱歉造成混乱!
  • 你应该提供一个基准代码,它在你的机器上有多快,你希望它有多快,并准确描述(用词)“分析字符串”在你的情况下是什么意思
  • 您将执行此操作多少次,四舍五入到最接近的 100,000?

标签: python regex string split


【解决方案1】:

这可能会解决您的问题,但由于您没有发布您的代码,我不知道它是否相似或不同或更慢或更快:

s = 'abd-123-32-few-333-1212'
check = {'32', '333'}
s = s.split('-')
print(dict((y, x) for (x, y) in enumerate(s) if y in check))

打印出来:

{'32': 2, '333': 4}

FWIW,您可能应该在函数中而不是在脚本主体中运行这样的代码,因为本地查找比全局查找快得多。

【讨论】:

  • 不要在相同的上下文中为不同的目的使用相同的名称,例如,您可以在此处使用items = s.split('-')
  • s 在实际程序中可能不是最好的名称,但根据上下文我可能会很乐意写,例如line = line.split()。这很明显我已经完成了较大的字符串,并且正在继续处理这些片段。其他任何东西都给了我更多的局部变量名称来担心心理跟踪。 SSA 非常适合编译器,但我是一个非常小脑袋的熊,而不是编译器。
猜你喜欢
  • 2011-02-22
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2016-03-01
  • 2013-11-30
  • 1970-01-01
相关资源
最近更新 更多