Python中的for循环是如何工作的?

2024-04-25 17:34:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个密码:

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']。拜托,你能解释一下为什么吗?你知道吗

如果您能推荐我对这段代码的一些改进,我将不胜感激。你知道吗


Tags: 代码in密码for语句sentencewordwords
3条回答

在python中使用for循环时,它会在要循环的对象上创建一个迭代器。在本例中,对象是Sentence

下面的代码演示了如果修改列表会发生什么

Sentence = ['abc', 'bcd', 'cde', 'dea', 'eab', 'abc']

sentence_iterator = iter(Sentence)

print(sentence_iterator.__next__()) # This will print 'abc'

Sentence.remove('abc')  # This will modify the list to ['bcd', 'cde', 'dea', 'eab', 'abc']

# This below code will print 'cde' not 'bcd' as the list is modified.
# and the sentence_iterator has already seen the first element
print(sentence_iterator.__next__())  

在Python中遍历列表时,对正在遍历的列表所做的任何修改都会对for循环产生影响。例如,以以下代码为例:

my_list = list()
my_list.append("hello")
for element in my_list:
    my_list.append("hello")

此代码将永远运行,因为我的\u列表的大小一直在增长。你知道吗

在编写代码时,必须考虑for循环中发生了什么。你知道吗

在您的列表中有两个'abc'实例,因此在第一次迭代之后,如果选中列表中的第一个元素,它们都将从句子中删除。这将留下一个如下所示的列表

['bcd', 'cde', 'dea', 'eab']

现在,Python检查列表中的第二个元素。这就是问题的根源。Python跳过“bcd”元素,直接转到“cde”,从句子中删除“cde”,留下如下列表:

['bcd', 'dea', 'eab']

现在,Python检查列表中的第3个元素,即'eab',然后将其从列表中删除,然后Python知道句子中没有更多的元素可以迭代,因为它已经到达了结尾,for循环中断,句子如下所示

['bcd', 'dea']

我不完全确定你到底希望你的代码做什么,所以我不能真正提出一个解决方案,但我希望这是有意义的。你知道吗

Sentence的第一个元素是'abc'
内部循环从Sentence中删除'abc',留下['bcd', 'cde', 'dea', 'eab']。你知道吗

外循环继续使用Sentence的第二个元素,即现在的'cde'
内部循环删除'cde',留下['bcd', 'dea', 'eab']。你知道吗

外循环继续使用Sentence的第三个元素,即现在的'eab'
内部循环删除'eab',留下['bcd', 'dea']。你知道吗

外部循环现在想继续使用第四个元素,但是Sentence只有两个元素,所以它停止了。你知道吗

这个故事的寓意是,不要在迭代时修改集合。你知道吗

相关问题 更多 >