【问题标题】:Count the number of comparison when compare two lists of string python比较两个字符串python列表时计算比较次数
【发布时间】:2019-02-26 18:33:14
【问题描述】:

我有作业无法正确完成,并且不确定代码有什么问题。

练习是: 用简单的搜索或蛮力找出我们做了多少比较:

我们有 2 个包含字母(字符串)的列表,我们比较它们。打印出进行了多少比较。

例子:

模式= ABABC

text=ABBABACABCBAC

我是如何尝试的:

 def search(text,pattern):
    text=list(text)
    pattern=list(pattern)
    n=len(text)
    m=len(pattern)
    co=1
    l=0
    k=0
    while k<=m:
        if text[l] == pattern[k]:
            co+=1
            l+=1
            k+=1
        else:
            co+=1
            l+=1
            k=0
     c=co
    return "Simple matching made " + str(c) +" 
comparisons"

应该是16,因为我们用字母比较,类似3+1+1+4+1+2+1+3

我们得到 3:A=A 表示 +1,B=B 表示 1,
B 不是 A,所以我们添加 +1,但在文本中移动 1。

【问题讨论】:

  • 您能否更详细地解释一下您是如何达到 3+1+1+4+1+2+1+3 我想我理解前 3 个,但如果我理解了,那么下一个数字将是2...
  • 是的。因此,我们通过一种方式将 BBABA 与 ABABC 进行比较。但是,如果我们比较第一个字母,我们会发现它不是 eqaul,所以我们比较了一个,所以我们添加了一个
  • 下一个也是B开头所以+1。第四个我们有ABACA,所以我们比较:我们有A +1,我们有B +1,A +1,C,我们比较+1,但不是B,所以我们转移。

标签: python comparison string-comparison brute-force


【解决方案1】:

我编写了一些我认为你正在寻找的东西,但我认为你最后错过了一个术语,除非我做错了。 模式='ABAABC' text = 'ABBABACABCBAC'

def search(text, pattern):
    slices = len(text) - len(pattern)
    for i in range(0, slices + 1):
        count = 0
        text_to_compare = text[i:i + len(pattern)]
        for j in range(len(pattern)):
            count += 1
            if pattern[j] == text_to_compare[j]:
                continue
            else:
                break
        print("{} -> {}".format(text_to_compare, count))

search(text, pattern)

这个输出

ABBAB -> 3

BBABA -> 1

BABAC -> 1

ABACA -> 4

BACAB -> 1

ACABC -> 2

CABCB -> 1

ABCBA -> 3

BCBAC -> 1

它可以适应总计数,例如:

def search(text, pattern):
    total_count = 0
    slices = len(text) - len(pattern)
    for i in range(0, slices + 1):
        count = 0
        text_to_compare = text[i:i + len(pattern)]
        for j in range(len(pattern)):
            count += 1
            total_count += 1
            if pattern[j] == text_to_compare[j]:
                continue
            else:
                break
        print("{} -> {}".format(text_to_compare, count))
    print("Total count: {}".format(total_count))

它的输出和以前一样,但也有:

总数:17

这就是你要找的吗?我可以解释你不明白的部分:)

【讨论】:

  • 是的,我认为这是正确的。你能解释一下最后的打印部分吗,因为我从未见过或使用过“{} - >{}”。格式
  • @werlless 它采用右侧提供的参数并将它们放入您的字符串中。我只是使用默认模式,其中提供给.format() 的第一个变量填充字符串中的第一个{},依此类推。它类似于字符串的 % 运算符。虽然还有很多其他方法可以使用它,所以这里有一个教程来介绍它们geeksforgeeks.org/python-format-function
猜你喜欢
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多