【问题标题】:Sequence search using arrays in python在python中使用数组进行序列搜索
【发布时间】:2020-04-01 06:56:22
【问题描述】:

所以,我有以下 2 个数组:

a = [1,2,3]
b = [1,2,4,1,2,5,1,3,2,4,5,11,23,24,51,72,5,91,19,0,1,2,4,2,3,45,3,2,1,2,6,7,56,78,354,3,2,1,0,111,15,1,2,3,5,6,4,7,3,8,910,678]

我需要使用 Python 在数组 B 中搜索数组 A(以完全相同的顺序)。我尝试了两种不同的方法来解决这个问题。第一种方法导致我根本无法解决的索引错误。第二种方法以二元答案 True/False 的形式让我得到了预期的结果。我现在没有想法。请帮助我以合适的方式解决这个问题。

#one of the attempts that i made
from collections import Counter
a = [1,2,3]
b = [1,2,4,1,2,5,1,3,2,4,5,11,23,24,51,72,5,91,19,0,1,2,4,2,3,45,3,2,1,2,6,7,56,78,354,3,2,1,0,111,15,1,2,3,5,6,4,7,3,8,910,678]
print (a,b)

def string_conv(array):
    string = ''
    for i in range(len(array)):
        string += str(array[i])
    return string

a = string_conv(a)
b = string_conv(b)

print (a,b)

def array_check(string, substring):
    c = Counter(string)
    for char in substring:
        if c[char] > 0:
            c[char] -= 1
        else:
            return False
    return True

print (array_check(a, b))

【问题讨论】:

  • 您可以显示您的尝试和涉及的错误,以及您想要的输出。我猜你想要索引,因为你建议你不想要True/False
  • 请重复介绍,尤其是how to ask。简单地转储您的问题并寻求解决方案对于 Stack Overflow 来说是题外话。
  • 其实我对编程很陌生,所以我不太熟悉堆栈溢出的用法。下次我一定会记住这一点的。
  • @dspencer 是的,实际上我需要序列匹配开始的索引。

标签: python python-3.x list search sequence


【解决方案1】:

可能有一种更优雅的方法,但这应该可行:

for i in range(len(b) - len(a)):
    for j in range(len(a)):
        if b[i + j] == a[j]:
            if j == len(a) - 1:
                print("Found it!")
            else:
                continue
        else:
            break

【讨论】:

  • 开始的索引是print()语句运行时i的值
  • 好的。那么,如果我在打印语句之后使用标识符存储“j”并在循环之后打印它应该可以正常工作吗?我的意思是它会给我匹配开始的索引还是匹配结束的索引?
  • 你想存储 i 的值,它将等于 print 语句中匹配开始的索引。
猜你喜欢
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 2011-12-17
  • 2014-08-24
  • 2023-03-19
相关资源
最近更新 更多