【问题标题】:generator object preventing list comprehension防止列表理解的生成器对象
【发布时间】:2021-12-27 16:31:58
【问题描述】:

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

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]

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

myNums = [len(myString[i] for i in range(len(myString)))]

但是当我这样做时,我会得到TypeError: object of type 'generator' has no len()

我不知道生成器对象在哪里,以及为什么它与列表理解不兼容。任何提示/建议表示赞赏,谢谢。

【问题讨论】:

  • 你打错了:len(myString[i] 应该是len(myString[i])
  • 最后的)之一应该被删除。
  • 不应该是 myNums = [len(myString[i]) for i in range(len(myString))] 吗?
  • 为什么不只是[len(s) for s in myString]
  • 嗯,是的,谢谢facepalm

标签: python list generator


【解决方案1】:

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

myNums = [len(w) for w in myString]
print(myNums)

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

你也可以使用函数式编程:

myNums = list(map(len, myString))
print(myNums)

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

【讨论】:

    【解决方案2】:

    你有一个放错位置的右括号:

    myNums = [len(myString[i] for i in range(len(myString)))]
                             ^                             |
                             |___should go there___________|
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2021-04-07
      • 2016-10-04
      • 2023-02-02
      • 1970-01-01
      • 2018-08-11
      相关资源
      最近更新 更多