将字符串与字符序列进行比较

Posted

技术标签:

【中文标题】将字符串与字符序列进行比较【英文标题】:Comparing a string to a sequence of chars 【发布时间】:2021-08-27 13:38:24 【问题描述】:

我有以下字符串

"long"

我有一个chars 数组,其中包含序列[..., [l],[o],[n],[g],...]。有人可以帮我找到一种方法来将stringchars 的数组进行比较并返回TrueFalse,而不必将数组加入到string 中?

谢谢!

【问题讨论】:

什么是[..., [l],[o],[n],[g],...]?你的意思是[..., 'l','o','n','g',...]?请注意,这是一个 字符串 列表,每个字符串只有一个字符。 Python 没有原始字符类型。 写完答案后,我看到你不能使用join()。为了手动解决这个问题,我建议将其分解成更小的部分。试着在一张纸上解决一个例子。仔细考虑您在没有计算机的情况下采取的步骤。 用文字写出这些步骤。然后,当您对这些步骤有了清晰的认识后,请尝试将这些单词翻译成 Python 代码。 不将数组连接成一个字符串有什么原因吗? 【参考方案1】:

你可以这样做:

s = 'long'
lst = [['a'],['l'],['o'],['n'],['g'],['z']]

p = [[x] for x in s]
any([p==lst[i:i+len(p)] for i in range(0, len(lst)-len(p))])

Out[81]: True

评论中的问题:“如何获取第一个匹配的索引?”

[j for j, i in enumerate(range(0, len(lst)-len(p))) if p==lst[i:i+len(p)]][0]

Out[83]: 1

【讨论】:

感谢您的回答,我研究了一下代码,这似乎是一个完美的解决方案。还有一个问题,如果我想从列表/数组中获取这些字符的索引(或者至少是第一个字符的索引),是否有任何内置方法? @Hasan 更新了我的答案,如果它有帮助,请考虑支持并接受它,以帮助未来的读者,它给了我几点。编码愉快!【参考方案2】:

我不会说你应该这样做,但你当然可以。

z = "long"
a = [letter for letter in z]
b = ['l', ' ', 'x', 4, 'l', 'o', 'n', 'g', 5]
for i, j in enumerate(b):
    if a == b[i:i+len(a)]:
        print('"" found at index '.format(z,i))

实际上,我们分解了字符串,然后创建列表的切片以与分解后的字符串进行比较。

【讨论】:

以上是关于将字符串与字符序列进行比较的主要内容,如果未能解决你的问题,请参考以下文章

如何将双引号字符串与字符进行比较?

将字符串与 CoreData 进行比较

如何将 const 字符串引用与字符串指针进行比较?

将字符串与文件中的字符串进行比较[重复]

将字符缓冲区与字符串进行比较不起作用

将字符串与容差进行比较