如何检查一个字符串中的两个连续值是否是另一个字符串中的字符

2024-10-03 02:43:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图检查字符串中的两个连续值是否是字符(我预先确定的减去5个运算符)。我试着这么做:

test = "abcdefghijklmnop"

bad = "abfj"

for i in test:
    if i in bad and i+1 in bad:
        print("it works")

运气不好。有没有办法得到循环中字符串的下一个索引?在

谢谢!在


Tags: and字符串intestforifit运算符
3条回答

如果您只想检查test的两个连续字符在bad中是否匹配(对哪两个不感兴趣),您可以这样做

>>> any("".join([i,j]) in bad for i,j in zip(test,test[1:]))
>>> True

如果您希望哪两个字符匹配,哪一个不匹配:

^{pr2}$

为此,可以使用带有zip的生成器表达式。在

与列表理解相比,使用生成器表达式的好处是不必迭代整个字符串。在

test = "abcdefghijklmnop"
bad = "abfj"
bad_set = set(bad)

res = ((i in bad_set) and (j in bad_set) for i, j in zip(test, test[1:]))

for k in res:
    if k:
        print(k)
        break

# True

实际的索引是。这就是为什么你可以只写i in bad而不是{}。在

如果需要索引和字符,请使用enumerate,如下所示:

for idx, ch in enumerate(test):
    if ch in bad and test[idx+1] in bad:

或者两者都使用索引:

^{pr2}$

另外,请注意,无论采用哪种方法,当到达最后一个字符时,都会出现一个错误,您将尝试检查下一个字符,但没有下一个字符。在


如果您想更抽象地思考,那么th recipes in the ^{} docs中的pairwise函数(或者您可以pip install或者{}或者{};我想他们都有)可以让您在相邻的一对上循环任何。所以:

for current_char, next_char in pairwise(test):
    if current_char in bad and next_char in bad:

或者,如果不太灵活,这可能更容易理解:

for current_char, next_char in zip(test, test[1:]):
    if current_char in bad and next_char in bad:

如果你理解集合交集的概念,这里还有另一个技巧,可以让你避免不得不做两个单独的测试:

bad = set(bad)

for idx in range(len(test)):
    if bad.intersection(test[idx:idx+2]):

你仍然需要处理“最后一个”问题,你会得到一个错误的测试,而不是一个异常,但它仍然是错误的。在

您也可以将其与pairwise结合使用。在

相关问题 更多 >