len()函数在for循环里面计算字符串长度的区别

#问题:想要计算列表中每个字符串的长度,一开始用的第一种,返回只有一个总值

#第一种
for word in wordlist1:
...     lenlist = len(word)
 lenlist
#返回1

#但是其实想要的是这个结果

#第二种
wordlist3=[len(word) for word in wordlist1]
wordlist3
#返回[2, 9, 1, 4, 4]
列表中每个单词的词长(已经分词)

这两种的for的区别是什么呢?为啥第一种得不到第二种的结果呢?

“Devil组”引证GPT后的撰写:
在第一种方法中,你每次迭代都会将 lenlist 的值覆盖为当前单词的长度,所以在循环结束后,lenlist 只保留了最后一个单词的长度。因此,你需要创建一个空列表,然后在每次循环中将每个单词的长度附加到该列表中。例如:



lenlist = []
for word in wordlist1:
    lenlist.append(len(word))

在第二种方法中,你使用了列表推导式,它会创建一个新的列表,并将每个单词的长度附加到该列表中。因此,你得到了预期的结果。列表推导式的语法比使用循环更简洁,并且通常更易于阅读和编写

该回答引用GPTᴼᴾᴱᴺᴬᴵ

  • 第一种方法每次循环只计算了一个字符串的长度,然后把这个长度赋值给了变量lenlist。由于每次循环都会覆盖上一次的计算结果,因此最终lenlist只包含了最后一个字符串的长度,也就是最后一个字符串的长度为1,因此返回了1。

  • 第二种方法使用了列表推导式,它可以一次性计算所有字符串的长度,并将结果存储在一个列表中。列表推导式的语法是[expression for item in iterable],其中expression是用来计算结果的表达式,item是可迭代对象中的每个元素,iterable是可迭代对象,这里是wordlist1。因此,第二种方法可以计算每个字符串的长度,并将结果存储在一个列表中返回。

第一种,你需要先建立一个list,然后把for中每个len加入list里
否则你只有一个值在不停的变化