python - 使用蛮力在python 3中查找字符串中的所有子字符串
问题描述
我想用蛮力找到所有子字符串'A' to 'B'
,L = ['C', 'A', 'B', 'A', 'A', 'X', 'B', 'Y', 'A']
这就是我所做的:
def find_substring(L):
t = 0
s = []
for i in range(len(L) - 1):
l = []
if ord(L[i]) == 65:
for j in range(i, len(L)):
l.append(L[j])
if ord(L[j]) == 66:
t = t + 1
s.append(l)
return s, t
现在我想要输出:
[['A','B'], ['A','B','A','A','X','B'], ['A','A','X','B'], ['A','X','B']]
但我得到:
[['A','B','A','A','X','B','Y','A'],['A','B','A','A','X','B','Y','A'],['A','A','X','B','Y','A'],['A','X','B','Y','A']]
有人可以告诉我我做错了什么吗?
解决方案
问题是 lists
包含对列表的引用l
。
因此,即使您将正确的l
列表附加到s
,它们也会在被附加后更改,因为j
循环的未来迭代会修改l
列表。
您可以通过附加列表的副本来解决此问题l
:l[:]
.
此外,您可以直接比较字符串,无需转换为 ASCII。
def find_substring(L):
s = []
for i in range(len(L) - 1):
l = []
if L[i] == 'A':
for j in range(i, len(L)):
l.append(L[j])
if L[j] == 'B':
s.append(l[:])
return s
现在有效:
>>> find_substring(['C', 'A', 'B', 'A', 'A', 'X', 'B', 'Y', 'A'])
[['A', 'B'], ['A', 'B', 'A', 'A', 'X', 'B'], ['A', 'A', 'X', 'B'], ['A', 'X', 'B']]
推荐阅读
- mysql - SQL如何防止被like语句屏蔽
- javascript - 无法将对象分配给变量 Angular
- security - Linux 上每个进程的文件/文件夹加密
- c++ - 如何从 Unreal Engine 4 C++ 小部件内的单击 UI 按钮访问索引?
- c# - 用字符串路径绑定背景
- python - 在 Python 中执行 shell 命令:“错误替换”
- excel - 从用户窗体中删除表格行
- sql - 使用 OR 运算符时,查询是否会在右侧返回左侧条件?
- python - Python数学:创建一个新变量,它是一个数字减去一个变量
- python - 如何在 2 个不同的列 df 中获得具有共同值的 df?