首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成器对象防止列表理解

生成器对象防止列表理解
EN

Stack Overflow用户
提问于 2021-12-27 16:31:58
回答 2查看 62关注 0票数 1

我试图将字符串转换为单词列表,然后将其转换为单词长度列表。例如:

代码语言:javascript
复制
myString = 'this is a test string with test words in it'
myString = myString.split(' ')
myNums = []
for i in range(len(myString)):
    myNums.append(len(myString[i]))
print(myNums)
>>[4, 2, 1, 4, 6, 4, 4, 5, 2, 2]

我认为我应该能够使用列表理解来做到这一点,例如:

代码语言:javascript
复制
myNums = [len(myString[i] for i in range(len(myString)))]

但当我这么做的时候,我得到了TypeError: object of type 'generator' has no len()

我不知道生成器对象在哪里,以及为什么它与列表理解不兼容。任何建议或建议都很感谢,谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-27 16:42:43

可以通过迭代列表中的元素而不是索引来简化表达式:

代码语言:javascript
复制
myNums = [len(w) for w in myString]
print(myNums)

# Output
[4, 2, 1, 4, 6, 4, 4, 5, 2, 2]

您还可以使用函数式编程:

代码语言:javascript
复制
myNums = list(map(len, myString))
print(myNums)

# Output:
[4, 2, 1, 4, 6, 4, 4, 5, 2, 2]
票数 1
EN

Stack Overflow用户

发布于 2021-12-27 17:25:35

您有一个错误的结束括号:

代码语言:javascript
复制
myNums = [len(myString[i] for i in range(len(myString)))]
                         ^                             |
                         |___should go there___________|
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70498035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档