为什么我的列表不会遍历每个列表?

时间:2013-12-16 21:30:35

标签: python list loops

目前正在通过教程“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希望在一个oner中打印出我的脚本,而不是每个列表组件的连接字符串。

我知道我可以更改脚本以完全反映作者脚本

# 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

但我想知道为什么我的作品不能按预期工作?

4 个答案:

答案 0 :(得分:3)

您要将列表附加到列表中!你只想创建列表!

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

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

进入

elements = range(0,6)

您将获得预期的结果

为什么

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

答案 1 :(得分:1)

这是因为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]]

也许你的意思是extend列表:

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]

此示例中不需要list comprehension,但它演示了如何轻松过滤或映射这些元素。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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)

OR

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

然后

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

输出你想要的东西