我有这个代码:
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 循环都将从Sentence加载所有元素,因此在此循环结束时Sentence将为空。但事实并非如此,这段代码后面的句子是这样的:['bcd', 'dea']。拜托,你能解释一下为什么吗?
如果您能向我推荐此代码的一些改进,我将不胜感激。
当您在 Python 中遍历列表时,对您正在遍历的列表的任何修改都会对 for 循环产生影响。例如,拿这个代码:
my_list = list()
my_list.append("hello")
for element in my_list:
my_list.append("hello")
这段代码将永远运行,因为 my_list 的大小不断增长。
对于您的代码,您必须考虑 for 循环内部发生的事情。
您的列表中有两个 'abc' 实例,因此在第一次迭代后,检查列表中的第一个元素,它们都从 Sentence 中删除。这会留下一个看起来像这样的列表
['bcd', 'cde', 'dea', 'eab']
现在,Python 检查列表中的第二个元素。这就是问题产生的地方。Python 跳过 'bcd' 元素并直接移动到 'cde',从 Sentence 中删除 'cde',留下一个如下所示的列表:
['bcd', 'dea', 'eab']
现在,Python 检查列表中的第 3 个元素,即 'eab',然后将其从列表中删除,然后 Python 知道 Sentence 中没有更多元素可以迭代,因为它已经到达末尾并且 for 循环中断, 留下这样的句子
['bcd', 'dea']
我不完全确定您最终希望代码做什么,所以我无法真正提出解决方案,但我希望这是有道理的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句