如何检查列表中是否存在字符序列?

2024-09-26 04:47:43 发布

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

如何检查列表中是否存在字符序列?你知道吗

我有一个字符串,其中有些字符的序列会重复出现。我知道字符串是不可变的,所以我将字符串转换为列表。但是,我不知道如何遍历列表,找到事件并更改事件的第一个字母。你知道吗

message: DDMCAXQVEKGYBNDDMZUH
Occurence is: DDM

list: ['D', 'D', 'M', 'C', 'A', 'X', 'Q', 'V', 'E', 'K', 'G', 'Y', 'B', 'N', 'D', 'D', 'M', 'Z', 'U', 'H']

我目前所做的只是将消息转换为列表。我尝试过不同的方法,但都没有成功,这就是我没有发布的。不是真的要求你写代码,但至少解释一下如何实现这一点。你知道吗


Tags: 方法字符串代码消息message列表is字母
3条回答

检查一个字符串是否存在于另一个字符串中要容易得多,因为您可以简单地使用in运算符:

if 'DDM' in message:
     # do something

但是,由于您的目标是更改引用的第一个字母,因此可以使用str.index方法获取引用的索引,然后用当前字符串和新字母的片段组合一个新字符串:

try:
    i = message.index('DDM')
    message = message[:i] + new_letter + message[i + 1:]
except ValueError:
    raise RuntimeError("Sequence 'DDM' not found in message.")

使用for循环的简单解决方案是:

msg = 'DDMCAXQVEKGYBNDDMZUH'
occ = 'DDM'

for i in range(len(msg)):
    if msg[i:i+len(occ)] == occ:
        msg = msg[:i] + 'x' + msg[i+1:]

导致xDMCAXQVEKGYBNxDMZUH

这也适用于重叠的子字符串。例如:

msg = 'AAABAA'
occ = 'AA'

会给xxABxA

您可以使用re.sub()

import re

s = 'DDMCAXQVEKGYBNDDMZUH'

re.sub(r'DDM', '$DM', s)
# $DMCAXQVEKGYBN$DMZUH

相关问题 更多 >