1

各位程序员,大家好。

我是一个相当新的程序员,现在我面临着一个很大的困境。我收到错误消息:

can only assign an iterable

首先我不知道那是什么意思。

其次,我将把我的代码留给专业人士来批评它:

def num_top(int_lis):
    duplic_int_lis = int_lis
    int_firs= duplic_int_lis [0]
    int_lis[:] = duplic_int_lis [int_firs]

基本上我试图[0]在列表中找到元素,然后使用该 int 作为索引位置来查找该索引位置处的整数。

4

3 回答 3

4

int_lis[:] = duplic_int_lis [int_firs]表示分配duplic_int_lis [int_firs]to的所有项目int_lis,因此它希望您在 RHS 上传递一个可迭代/迭代器。

但是在您的情况下,您将其传递给不可迭代的,这是不正确的:

>>> lis = range(10)
>>> lis[:] = range(5) 
>>> lis               #all items of `lis` replaced with range(5)
[0, 1, 2, 3, 4]

>>> lis[:] = 5        #Non-iterable will raise an error.
Traceback (most recent call last):
  File "<ipython-input-77-0704f8a4410d>", line 1, in <module>
    lis[:] = 5
TypeError: can only assign an iterable

>>> lis[:] = 'foobar' #works for any iterable/iterator
>>> lis
['f', 'o', 'o', 'b', 'a', 'r']

由于您无法迭代整数,因此会出现错误。

>>> for x in 1: pass
Traceback (most recent call last):
  File "<ipython-input-84-416802313c58>", line 1, in <module>
    for x in 1:pass
TypeError: 'int' object is not iterable
于 2013-11-06T19:31:04.307 回答
1

切片分配的 RHS 必须是可迭代的,而不是标量。考虑切片删除然后追加。

于 2013-11-06T19:30:27.303 回答
0

可迭代对象是具有多个项目的事物,您可以对其进行迭代(例如:取第一个值做某事,然后第二个做某事,等等...) 列表、字典、元组、字符串中有多个项目,并且可以是用作可迭代对象。作为一个反例:数字类型不符合可迭代的条件。

请记住,计算机从 #0 开始计数,因此:如果您想要列表的第一个值,您可以使用

my_list[0]

在你走得更远之前,我建议你看这个关于循环的视频。https://www.youtube.com/watch?v=EnSu9hHGq5o

于 2013-11-06T19:36:03.920 回答