我想用bruteforce找到L = ['C', 'A', 'B', 'A', 'A', 'X', 'B', 'Y', 'A']
中的所有子字符串'A' to 'B'
,这就是我所做的:
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
现在我需要输出:
^{pr2}$但我得到:
[['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']]
有人能告诉我我做错了什么吗?在
问题是列表
s
包含对l
列表的引用。在因此,即使您要将正确的
l
列表附加到s
之后,这些列表也会随着j
循环的未来迭代修改l
列表而更改。在您可以通过附加
l
列表的副本来解决此问题:l[:]
。在此外,您可以直接比较字符串,无需转换为ASCII。在
它现在起作用了:
^{pr2}$最好先找到}的所有索引,然后迭代这些索引,避免使用暴力。在
'A'
和{当您将
l
附加到s
时,您正在向一个列表添加一个引用,然后该列表将继续增长。您希望在附加时附加l
列表内容的副本,以使其保持静态。在这是一个常见的常见问题解答;这个问题可能应该作为一个副本来结束。在
相关问题 更多 >
编程相关推荐