Python 循环中字符串比较

标签 python string loops comparison match

我对这个论坛、编程和 Python 都是新手。我正在尝试开发我的第一个程序,但是在一个特定问题上我不断遇到障碍。我希望某种鞋底能让我摆脱痛苦并告诉我如何正确地做我想做的事情。我相信如果你知道自己在做什么的话这很简单,但目前我很愚蠢并且不知道我在做什么:-)

示例:

我需要处理 2 个文件,A 和 B

文件 A 包含文本:

This is a test

文件 B 包含文本:

h
t
s
i
a

我需要创建一个程序,每次从文件 A 中抓取 1 个字符,然后搜索文件 B 寻找相同的字符。一旦程序找到匹配项,我希望它打印找到匹配项的行号,然后继续从文件 A 中抓取另一个字符并重复此过程直到 EOF。

最佳答案

好的,让我们一步一步地进行。首先,我会将文件 B 读入一个非常适合快速查找的结构,因为我们将经常这样做:

chars = {}
with open("B") as lookupfile:
    for number,line in enumerate(lookupfile):
        chars[line.strip()] = number

现在我们有一个字典chars,其中包含字母作为键,其行号作为值:

>>> chars
{'t': 1, 'a': 4, 'i': 3, 'h': 0, 's': 2}

现在我们可以迭代第一个文件。文件的标准 Python 迭代器每次迭代消耗一行,而不是一个字符,因此最好将整个文件读入一个字符串,然后对其进行迭代(因为对于字符串,迭代是逐个字符的):

with open("A") as textfile:
    text = textfile.read()

现在我们迭代字符串并打印匹配值:

for char in text:
    if char in chars:
        print("Character {0} found in row {1}".format(char, chars[char]))

如果您不喜欢两次访问字典,也可以使用

for char in text:
    found = chars.get(char):    # returns None if char isn't a key in chars
    if found:
        print("Character {0} found in row {1}".format(char, found))

或者,使用异常:

for char in text:
    try:
        print("Character {0} found in row {1}".format(char, chars[char]))
    except KeyError:
        pass

关于Python 循环中字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17134024/

相关文章:

python - 删除边缘时如何保留路径 networkx 图

python - 如何在python django中加载静态文件

python - 具有可变 django 模板的动态 URL

javascript - 判断字符串是否有子串(单词)

string - 为什么 Fortran 版本的 Delphi 的 TStringList 的业余实现比 Delphi 的内置版本低 10 倍?

python - 获取 "for"循环以从列表中删除字符(如果它们相等)

python - 将所有 pyspark 数据帧列连接成一个字符串列

c - 在字符串中定位一个元素并在 C 中比较它

java - 将循环结果放入java中的字符串中

c++ - 如何递归比较 vector ?