在运行迭代器时,我不能使其更短。
我想编写一个获取字符串并删除其中重复序列的函数。
例如:
如果a具有字符串aaaaabbbbbbbcccccccDDDDDDaaaaa
我应该得到回报abcDa
。
我尝试使用for
循环遍历字符串,每次看到一个新字母时,我都会将该字母保存在一个变量中,该变量加起来就是固定的字符串。
def string_sequence_fixing(string):
c = ''
for char in my_str:
if c != char:
c = char
else:
my_str = my_str.replace(c, '', my_str.count(c) - 1)
return my_str
我要避免的问题是迭代次数过多。 当我看到一个新角色时,我想删除该角色的所有其他顺序, 但末尾的第二行不会更新for循环中的“条件”。
答案 0 :(得分:0)
简短的回答:循环不会那样工作。
更长的答案:
以下是一些简单的伪代码,供您细读:
j=99
print "J is " j
for j=0;20;5
print j \t
end
print "Now J is " j
输出可能会让您感到惊讶。
run
J is 99
0 5 10 15 20
Now J is 99
原因是:循环中的变量j不是循环中的j变量。
我喜欢使用“堆栈”一词(某些语言声称它们不使用堆栈。在那种情况下,我称其为“非堆栈堆栈”。简单的堆栈表示内存中的临时存储空间。
初始变量“ j”进入“程序数据空间”。循环变量“ j”进入“堆栈数据空间”。
使用变量并不“真的”意味着您正在使用变量,它只是内存空间的助记符。让我们再看看该示例代码:
pointer-to-program-space-variable-named-j = 99 (poke into memory location 1:4500)
pointer-to-stack-space-variable-named-j = 0 (poke into memory location 87:300)
print pointer-to-stack-space-variable-named-j followed by tab
increment pointer-to-stack-space-variable-named-j by 5
repeat until pointer-to-stack-space-variable-named-j = 20
print pointer-to-program-space-variable-named-j
有了这些知识,让我们看一下代码,看看发生了什么事情:
def string_sequence_fixing(string):
c = ''
for char in *STACK*.my_str:
if c != char:
c = char
else:
my_str = my_str.replace(c, '', *PROGRAM*.my_str.count(c) - 1)
return my_str
看看它们是如何不同的变量?永远不要假设循环变量和程序变量相同。您需要重做算法才能完成想要做的事情。
另外,请参阅@David Cullen提供的链接。
答案 1 :(得分:0)