我有这个密码:
Sentence = ['abc', 'bcd', 'cde', 'dea', 'eab', 'abc']
Words = list()
iterations = 0
a = 0
for word in Sentence:
Words.append(0)
for nextWord in Sentence:
if(word == nextWord):
Words[iterations] += 1
Sentence.remove(nextWord)
a +=1
iterations += 1
我希望两个for循环都将加载语句中的所有元素,因此在这个循环的末尾将语句为空。但事实并非如此,这个代码后面的句子看起来像这样:['bcd','dea']。拜托,你能解释一下为什么吗?你知道吗
如果您能推荐我对这段代码的一些改进,我将不胜感激。你知道吗
在python中使用for循环时,它会在要循环的对象上创建一个迭代器。在本例中,对象是
Sentence
下面的代码演示了如果修改列表会发生什么
在Python中遍历列表时,对正在遍历的列表所做的任何修改都会对for循环产生影响。例如,以以下代码为例:
此代码将永远运行,因为我的\u列表的大小一直在增长。你知道吗
在编写代码时,必须考虑for循环中发生了什么。你知道吗
在您的列表中有两个'abc'实例,因此在第一次迭代之后,如果选中列表中的第一个元素,它们都将从句子中删除。这将留下一个如下所示的列表
现在,Python检查列表中的第二个元素。这就是问题的根源。Python跳过“bcd”元素,直接转到“cde”,从句子中删除“cde”,留下如下列表:
现在,Python检查列表中的第3个元素,即'eab',然后将其从列表中删除,然后Python知道句子中没有更多的元素可以迭代,因为它已经到达了结尾,for循环中断,句子如下所示
我不完全确定你到底希望你的代码做什么,所以我不能真正提出一个解决方案,但我希望这是有意义的。你知道吗
Sentence
的第一个元素是'abc'
。内部循环从
Sentence
中删除'abc'
,留下['bcd', 'cde', 'dea', 'eab']
。你知道吗外循环继续使用
Sentence
的第二个元素,即现在的'cde'
。内部循环删除
'cde'
,留下['bcd', 'dea', 'eab']
。你知道吗外循环继续使用
Sentence
的第三个元素,即现在的'eab'
。内部循环删除
'eab'
,留下['bcd', 'dea']
。你知道吗外部循环现在想继续使用第四个元素,但是
Sentence
只有两个元素,所以它停止了。你知道吗这个故事的寓意是,不要在迭代时修改集合。你知道吗
相关问题 更多 >
编程相关推荐