1

几周前我开始学习 python,到目前为止还没有编程背景。我想知道是否有人可以用简单的话解释我,“循环列表”有什么作用?这是示例:

list = [4, 'b', 'e',21,5]
for n in list:
    print n

运行脚本后,我得到的是:逐项打印的列表:4 b e 21 5

但我不明白它背后的逻辑。有人愿意向我解释一下吗?

谢谢你,也对不起我的无知。

4

5 回答 5

3

我认为您的示例使您可以要求的尽可能清楚。

mylist = [4, 'b', 'e', 21, 5]

通过使用[语法,这将创建一个新列表,并按照给定的顺序使用给定的项目对其进行初始化。然后将列表分配给变量mylist。(请注意,我更改了名称,因为listlist数据类型的默认名称)。

for n in mylist:

这是一个for 循环,它遍历列表中的所有项目。Python 力求像英语一样被阅读。所以它说,

对于 list 中的每个项目mylist,调用该项目n并执行以下操作:

然后,for为每个项目执行缩进 , 下的所有内容。

print n

当然,这会打印n到屏幕上。


总之,你的代码说:

1) 创建一个包含以下项目的列表:4, 'b', 'e', 21, 5

2) 对于该列表中的每个项目,调用它n,然后打印n到屏幕上。

于 2013-04-28T22:53:56.613 回答
2

由于您似乎没有接触过其他编程语言,因此您无法真正理解为什么这确实是一种有用的表示法来表示对列表元素的迭代。

为了对比它,这里有一个来自另一种更底层语言的例子:

int foo[] = { 0, 1, 2, 3, 4, 5, 6 };
int i;
for(i = 0; i < sizeof(foo) / sizeof(int); i++)
{
   printf("%d", foo[i]);
}

基本上,Python 列表就像添加了许多语法便利的数组。也就是说,你可以用更紧凑的形式表达你经常需要的东西,比如迭代:

somelist = [0, 1, 2, 3, 4, 5, 6]
for element in somelist:
    print(element)

编辑:有时查看源代码会有所帮助,在这种情况下Objects/listobject.c是 Python 源代码分发的文件(例如 3.3)。在那里你会找到所有 python 列表方法的实现,其中有listiter_next,它处理遍历。去掉一些东西,代码如下所示:

static PyObject *
listiter_next(listiterobject *it)
{
    PyListObject *seq;
    PyObject *item;

    seq = it->it_seq;
    if (seq == NULL)
        return NULL;

    if (it->it_index < PyList_GET_SIZE(seq)) {
        item = PyList_GET_ITEM(seq, it->it_index);
        ++it->it_index;
        return item;
    }

    it->it_seq = NULL;
    return NULL;
}

你可以说这就是循环列表的作用

于 2013-04-28T22:53:30.070 回答
1

考虑到

for x in list:
    print x

作为句子

对于列表中的每个项目 x,打印(显示)它是什么。

在另一种情况下

for x in list:
    print x+1

你可以把它读成

对于列表中的每一项 x,打印 item+1 的结果。

就“循环遍历列表”而言,可以将“循环遍历”视为“从外部检查”。比喻:你在一架飞机上,飞过一组建筑物:

buildings = ['Empire State', 'Chrysler', 'Masonic Lodge']

for building in buildings:
   print "Just flew over the %s building." % building

您在一组项目中“重复”或“为每个”重复一项任务(在循环中),在隐喻的情况下,是一组建筑物。

于 2013-04-28T23:03:37.973 回答
0

这个“循环列表”只是遍历列表中存在的每个元素(在您的示例中,这些元素是4, b, e, 21, 5),以便您可以单独对它们执行一些操作(例如print,或在您的示例中显示其值)。

换句话说,当您执行此代码时:

for element in list:
    print element

向一个人指示以下内容是相同的:

for each element pertaining to an array X:
    show me the value of the N-th element from X (X[N])

当然,除了“显示”每个元素的值之外,您还可以执行其他操作。您可以遍历该列表并(几乎)以您喜欢的所有方式修改值。

于 2013-04-28T22:54:13.857 回答
0

您有一个包含一定数量元素的列表。现在您想对该列表中的每个元素执行一些操作,例如,将其打印到控制台。通过使用for n in listlist一个一个地考虑元素,当前考虑的元素被称为n。首先,n指的是 中的第一个元素list,然后是第二个,然后是第三个,依此类推。在该行下方的缩进块中,您描述了每个元素想要发生的事情n。在这种情况下,唯一的指令就是print它。

于 2013-04-28T22:54:57.780 回答