如何检查列表中是否存在字符序列?
我有一个包含一些字符的字符串,这些字符具有重复出现的序列。我知道字符串是不可变的,因此我将字符串转换为列表。但是,我不确定如何遍历列表,查找事件并更改事件的首字母。
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']
我目前所拥有的只是将消息变成列表。我尝试了不同的方法,但没有成功,这就是我没有发布的方法。并不是真正要求您编写代码,但至少要说明如何实现。
答案 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