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:使用 trapz 方法时,只能将 size-1 数组转换为 Python 标量
Pandas TypeError:只能将str(不是“int”)连接到str
TypeError:尝试绘制函数时,只能将大小为 1 的数组转换为 Python 标量