【问题标题】:TypeError: 'int' object is not iterable. When iterating over each string in string dataTypeError:'int' 对象不可迭代。遍历字符串数据中的每个字符串时
【发布时间】:2019-02-28 02:36:51
【问题描述】:

你好,

我的目标是使用.lower() 将文本数据中的每个字符串转换为小写。我尝试将.count() 与单行迭代一起使用。但是,我收到以下错误:

TypeError: 'int' object is not iterable

这是我的代码:

# Iterating over the strings in the data. The data is called text
text_lowercase = ''.join((string.lower().strip() for string in text.count(0,)))

我想使用单线迭代并执行此操作。 帮助将不胜感激。干杯!

【问题讨论】:

  • text.count() 听起来像一个数字,那么for string in text.count(0,) 应该做什么?显然for string in 10 之类的东西没有意义,但这就是你正在做的事情。
  • 什么是文本?一个字符串?字符串列表?字典?
  • 我正在尝试使用 count 作为计数器来遍历 'text 数据 @JohnColeman 中的每个字符串实例
  • @RayToal text 是字符串数据
  • 那为什么不直接text.lower() ??? ;-)

标签: python string loops text iteration


【解决方案1】:

text.count 返回一个整数。您尝试对其进行迭代:

for string in text.count(0,)

但是由于它返回一个整数,所以没有in(它是不可迭代的)。这就是错误消息告诉您的内容。

将来,为了更好地识别错误来源,请尝试将单行拆分为多行。这将为您提供有关您的操作失败的部分的更好反馈。

【讨论】:

    【解决方案2】:

    这里有几个问题需要指出:

    text_lowercase = ''.join((string.lower().strip() for string in text.count(0,)))
    

    命名临时变量string 是个坏主意,因为这看起来很像类型名称。像s 这样的东西更常见且可读性更高。

    或者word,因为这就是你看起来的样子。这是第二个问题,您的方法似乎将字符串分解为字符,但是从 cmets 看来您想对单词进行操作? (您对strip 的使用也暗示了这一点)

    您正在加入'',这导致字符串的所有部分都被连接起来,它们之间没有空格。

    正如其他人指出的那样,count 返回一个整数,但您想对实际字符串进行操作。您表示您只尝试 count 进行迭代,而在 Python 中不需要像在许多其他语言中那样。

    把它放在一起:

    text_lowercase = ' '.join([w.lower() for w in text.split(' ')])
    

    或者如果你追求的是字符:

    text_lowercase = ''.join([ch.lower() for ch in text])
    

    但是你可以:

    text_lowercase = text.lower()
    

    也许你喜欢文字,但想去掉多余的空格?

    text_lowercase = ' '.join([w.lower() for w in text.split(' ') if w != ''])
    

    或者简写:

    text_lowercase = ' '.join([w.lower() for w in text.split(' ') if w])
    

    【讨论】:

    • 谢谢! @格里斯玛。就一个问题。假设text 是所有作为输入数据的字符串。输出text_lower 是字符串还是列表?我问是因为我看到了列表理解
    • 您发现列表理解是正确的-它在那里是因为.join() 需要一个列表作为输入,所以我生成单词列表,然后加入该列表并将其转换为字符串再次。 text_lower 将是一个字符串。
    【解决方案3】:

    您得到的异常是因为 count() 返回一个 int 然后您尝试迭代该 int。我认为你应该删除count,你可能会很高兴(取决于text 的样子)

    如果你想有一个函数在你的text 中小写string 的实例,也许你可以使用这样的东西:

    def lowercase_instance(text, string):
        return string.lower().join(text.split(string))
    
    

    现在,如果你有一个文本列表,那么你可以这样做:

    lowercase_texts = [lowercase_instance(text, string) for text in texts]
    

    希望这会有所帮助!

    【讨论】:

    • 嘿,谢谢!我尝试过这样的事情。问题是我希望能够获取文本并进行处理。比如说,如果我传入一个列表,它将遍历列表中的每个字符串并处理文本。我不想做列表理解。
    • 好的,让我解释一下。我想创建一个函数以将字符串作为参数传递。只有字符串数据。我希望这个函数能够遍历字符串数据中的每个字符串实例并将字符串小写。最后,函数应该返回一个字符串之后。我希望使用该函数并传入一个带有字符串的列表。你不需要写出我可以做到的函数,但这只是我遇到问题的单线迭代。现在明白了吗? @glhuilli
    • 我在上面的代码中对您的 cmets 进行了拍摄,不确定这是否正是您想要的,请告诉我。
    • 该函数应该只传入一个字符串作为参数而不是其他任何东西。该字符串可以是文本或消息。你有两个。您可以将其更改为仅传递一个参数文本或字符串吗? @glhuilli
    • 一个参数看起来像'this'(选项1)还是像['this'](选项2)?如果是选项 2,那么要迭代的列表是什么?如果是option2,那么你需要匹配的实例是什么,它是固定的吗?
    猜你喜欢
    • 2022-01-13
    • 2019-02-27
    • 1970-01-01
    • 2017-04-22
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多