【问题标题】:Code giving wrong index in list of strings在字符串列表中给出错误索引的代码
【发布时间】:2021-07-26 03:08:16
【问题描述】:

我正在尝试在字符串列表中搜索特定子字符串。奇怪的是 'start' 有效并给出了正确的索引,而 'end' 在正确的索引之后给出了大约 39 个索引的索引。

file = open(fileName, 'r')
trimmedText = file.readlines()
file.close()

start = [i for i, line in enumerate(trimmedText) if '*** START OF THE PROJECT GUTENBERG EBOOK' in line]
end = [i for i, line in enumerate(trimmedText) if '*** END OF THE PROJECT GUTENBERG EBOOK' in line]

【问题讨论】:

  • 能否也分享trimmedText或文件的内容?
  • 该文件是一整本书,包含超过 20000 个元素,其中只有这些行的一个迭代
  • 你是说print([trimmedText[i] for i in end]) 没有给出带有'END OF ...' 的行?
  • print([trimmedText[i] for i in end]) 给出['*** END OF THE PROJECT GUTENBERG EBOOK HISTORY OF AUSTRALIAN EXPLORATION ***\n']print(end) 给出错误索引
  • @MatiasJoaHauge - 你能把它减少到一个最小的工作示例吗?

标签: python string list indexing substring


【解决方案1】:

由于您似乎想要第一个命中作为开始,然后第一个命中作为结束,我建议在生成器表达式中使用枚举列表:

trimmedList = ['ham', 'eggs', 'European swallow', 'spammy spammity spam', 'spamelot', 'spam in a can', 'bacon']
enum_trimmed = enumerate(trimmedList)
start = next(i for (i, words) in enum_trimmed if 'eggs' in words)
end = next(i for (i, words) in enum_trimmed if 'spam' in words)
start, end
(1, 3)

您获得的优势是,您在行中前进的距离仅够找到开始标记,然后继续前进直到找到结束标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2021-07-23
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多