繁体   English   中英

为什么我的清单不遍历每个清单?

[英]Why won't my list iterate over each one?

当前正在通过教程“ Python的艰难方法”进行工作。

我正在学习列表和循环(ex32)。

练习结束时,Zed(教程作者)告诉我们,我已经完成了游戏。

# we can also build lists, first start with an empty one
elements = []
elements.append(range(0,6))

# then use the range function to do 0 to 5 counts
for element in elements:
    print "Adding %s to elements" % element


# now we can print them out too
for element in elements:
    print"Element was: %s" % element

这样产生的输出如下:

Adding [0, 1, 2, 3, 4, 5] to elements
Element was: [0, 1, 2, 3, 4, 5]

我曾期望看到这样的事情:

Adding 0 to elements
Adding 1 to elements
Adding 2 to elements
Adding 3 to elements
Adding 4 to elements
Adding 5 to elements
Element was: 0
Element was: 1
Element was: 2
Element was: 3
Element was: 4
Element was: 5

但是相反,Python希望一次打印出我的脚本,而不是将每个列表组件的连接字符串打印出来。

我知道我可以更改脚本以准确反映作者的脚本

# we can also build lists, first start with an empty one
elements = []

# then use the range function to do 0 to 5 counts
for i in range(0, 6):
    print "Adding %d to the list." % i
    # append is a function that lists understand
    elements.append(i)

# now we can print them out too
for i in elements:
    print "Element was: %d" % i

但我只想知道为什么我的作品无法按预期工作?

您正在将列表追加到列表! 您只想创建列表!

您所需要做的就是更改以下内容:

elements = []
elements.append(range(0,6))

进入

elements = range(0,6)

您将获得预期的结果

为什么

首次创建elements时,它是一个空白列表。 然后将range(0,6)附加到空列表。 现在元素看起来像[[0,1,2,3,4,5]] (或[range(0,6)] ),它是一个包含一个元素的列表,一个列表。

这是因为elements包含一个element ,即一个list[0, 1, 2, 3, 4, 5] list.append()将一个项目添加到列表的末尾。

In [1]: elements = []

In [2]: elements.append(range(0,6))

In [3]: elements
Out[3]: [[0, 1, 2, 3, 4, 5]]

也许您打算扩展此列表:

In [1]: elements = []

In [2]: elements.extend(range(0, 6))

In [3]: elements
Out[3]: [0, 1, 2, 3, 4, 5]

还是更换它?

In [4]: elements = range(0,6)

In [5]: elements
Out[5]: [0, 1, 2, 3, 4, 5]

甚至:

In [6]: elements = [element for element in range(0,6)]

In [7]: elements
Out[7]: [0, 1, 2, 3, 4, 5]

在此示例中, 列表理解是不必要的,但它演示了如何轻松过滤或映射这些元素。

.append将单个元素添加到列表中。 那个元素是range(0, 6) 0,6 range(0, 6) ,它是[0, 1, 2, 3, 4, 5] (Johnsyweb在我之前得到了它)。 您可以使用.extend追加每个

elements = []


elements.append(range(0,6)) 
# appends range(0,6) to elements. range(0,6) creates a list in Python 2.x but only in Python 2.x. thanks to adsmith for pointing this out.

print elements

[[0, 1, 2, 3, 4, 5]] # it's clear that elements has 1 element. A list.

这就是为什么

for i in elements:
    print "adding %s to elements" % i

产生:

adding [0,1,2,3,4,5] to elements

要获得所需的输出:

elements = range(0,6)

要么

elements = [i for i in range(0,6)] # list comprehension

然后

for i in elements:
    print "adding %s to elements" % i

输出你想要的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM