Python:TypeError:只能在第 9 行分配一个可迭代对象

Posted

技术标签:

【中文标题】Python:TypeError:只能在第 9 行分配一个可迭代对象【英文标题】:Python: TypeError: can only assign an iterable on line 9 【发布时间】:2020-05-13 10:57:20 【问题描述】:

这是我的代码。我期望将句子中每个单词的长度分配给列表“AS INTEGERS”(不是字符串),但会得到主题中的错误。请帮忙!!

original_str = "The quick brown rhino jumped over the extremely lazy fox"

i = 0
num_words_list = []
original_strSplit = original_str.split(" ")

for each in original_strSplit:
   num_words_list[i:] = len(each)
   i += 1
   print(num_words_list)

【问题讨论】:

【参考方案1】:

有问题的线路是num_words_list[i:] = len(each)

问题是,你想在这条线上做什么?

如果您尝试在列表末尾添加一个新元素,那么也许您想使用 Python 的 append 函数,它正是这样做的。

例如,num_words_list.append(...) 会将代替 ... 的值附加到列表末尾。

如果您尝试替换列表中的现有元素,那么您的代码行几乎是正确的,但不应包含杂散的冒号。相反,它应该是这样的:num_words_list[i] = ...。但是,这不适用于您的情况,因为您的列表没有任何要替换的元素(毕竟它一开始是空的)。

在 Python 中,您可以在访问列表时在方括号内使用冒号,但这样做的作用是创建列表的切片或子列表。例如,如果你写num_words_list[3:8],那么它会通过在元素 3 之前和元素 8 之前对列表进行切片,从而生成一个包含 5 个元素(元素 3、4、5、6 和7) 从原始列表中。当然,这只有在列表实际上已经包含这么多元素时才有意义。您可以选择省略切片的端点。如果省略第一个端点,则切片从列表的开头开始,如果省略第二个端点,则切片在列表的末尾结束。因此,您无意中创建了一个从元素 i 之前扩展并到达列表末尾的切片。您还尝试分配给此切片,将其替换为不同的列表,但您替换为 (len(each)) 的值不是列表,导致您看到的 TypeError

【讨论】:

补充一点:Python 中的[x:] 语法意味着索引将从列表末尾开始计算x。 ***.com/a/4012395/6080254 我认为上面的评论不太正确。 [x:] 其中 x 是非负数,表示从索引 x 到末尾(所以 [0:] 表示从列表的开头到末尾)。您可以使用负值从末尾开始计数([-2:] 将列表的最后两个元素作为切片抓取)。【参考方案2】:

如果要将项目添加到列表中,可以使用append() 函数。我认为您正在尝试对一个简单的问题采取更复杂的方法。在您的代码中,您在每个 " " 处拆分一个字符串。这有效地创建了一个列表,其中包含original_str 中由" " 分隔的所有单词。然后,您遍历该列表。对于original_strSplit(现在是一个列表)中的每个单词,使用append() 函数附加该单词​​的长度len(each)。由于len() 函数返回integer,您可以使用append(len(each)) 将该值放入列表中。

original_str = "The quick brown rhino jumped over the extremely lazy fox"

num_words_list = []
original_strSplit = original_str.split(" ")

for each in original_strSplit:
   num_words_list.append(len(each))

print(num_words_list)

输出: [3, 5, 5, 5, 6, 4, 3, 9, 4, 3]

【讨论】:

以上是关于Python:TypeError:只能在第 9 行分配一个可迭代对象的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法访问属性“src”,图像为空

TypeError:使用 trapz 方法时,只能将 size-1 数组转换为 Python 标量

Pandas TypeError:只能将str(不是“int”)连接到str

TypeError:尝试绘制函数时,只能将大小为 1 的数组转换为 Python 标量

TypeError:在使用 Python 进行网络抓取时,只能将 str(而不是“列表”)连接到 str 错误

为啥这个 Verilog 模块在第 9 行显示“无效模块项”?