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

时间:2019-02-23 06:32:35

标签: 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']

我目前所拥有的只是将消息变成列表。我尝试了不同的方法,但没有成功,这就是我没有发布的方法。并不是真正要求您编写代码,但至少要说明如何实现。

4 个答案:

答案 0 :(得分: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.")

答案 1 :(得分:2)

您可以使用re.sub()

import re

s = 'DDMCAXQVEKGYBNDDMZUH'

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

答案 2 :(得分:0)

带有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

答案 3 :(得分:0)

最简单的方法是使用字符串replace()函数。

  

string.replace(s,old,new [,maxreplace])

     

返回字符串s的副本,并将所有出现的子字符串old替换为new。如果给出了可选参数maxreplace,则替换第一个出现的maxreplace。

parse_dates=[2,3]

替换功能将替换消息字符串中第一次出现的DDM。

输出:ABCCAXQVEKGYBNDDMZUH

如果我认真阅读了您的问题,您想搜索邮件中第一个出现的DDM并替换它的第一个字符。在这种情况下,请使用以下内容:

df = pd.read_csv('NEW_YORK_NYPD.csv', low_memory=False, parse_dates=[2,3], index_col=0)
print (df.head())

print (df.dtypes.head())
Unique Key               int64
Created Date    datetime64[ns]
Closed Date     datetime64[ns]
Agency                  object
Agency Name             object
dtype: object

输出:ADMCAXQVEKGYBNDDMZUH