Python:.append(0)

时间:2013-10-17 16:04:06

标签: python

我想问一下Python中的以下内容。 它取自http://danieljlewis.org/files/2010/06/Jenks.pdf

我已经发表评论,告诉我在那里发生了什么。

# Seems to be a function that returns a float vector
# dataList seems to be a vector of flat. 
# numClass seems to an int

def getJenksBreaks( dataList, numClass ):

    # dataList seems to be a vector of float. "Sort" seems to sort it ascendingly
    dataList.sort() 

    # create a 1-dimensional vector 
    mat1 = []

    # "in range" seems to be something like "for i = 0 to len(dataList)+1)
    for i in range(0,len(dataList)+1):

        # create a 1-dimensional-vector?
        temp = []
        for j in range(0,numClass+1):

            # append a zero to the vector?
            temp.append(0)

        # append the vector to a vector??
        mat1.append(temp)

(...)

我有点困惑,因为在pdf中没有显式的变量声明。但我认为并希望我能猜出变量。

4 个答案:

答案 0 :(得分:3)

是的,方法append()将元素添加到列表的末尾。我认为您对代码的解释是正确的。

但请注意以下事项:

x =[1,2,3,4]
x.append(5)
print(x)
    [1, 2, 3, 4, 5]

,而

x.append([6,7])
print(x)
    [1, 2, 3, 4, 5, [6, 7]]

如果你想要像

这样的东西
    [1, 2, 3, 4, 5, 6, 7]

你可以使用extend()

x.extend([6,7])
print(x)
    [1, 2, 3, 4, 5, 6, 7]

答案 1 :(得分:1)

Python没有显式的变量声明。它是动态类型的,变量是它们分配给它的任何类型。

您对代码的评估非常正确。

一个细节:range函数最多但不包括最后一个元素。因此,+1的第二个参数中的range会导致最后一个迭代值分别为len(dataList)numClass。这看起来很可疑,因为范围是零索引的,这意味着它将执行len(dataList) + 1次迭代的(这似乎是可疑的)。

大概dataList.sort()会修改dataList的原始值,这是.sort()方法的传统行为。

确实将新向量附加到初始向量上,如果查看完整源代码,有几个块会继续将更多向量连接到mat1

答案 2 :(得分:1)

append是一个列表函数,用于在列表的末尾追加一个值

mat1和temp一起创建一个2D数组(例如= [[],[],[]])或矩阵(m x n) 其中m = len(dataList)+1和n = numClass

结果矩阵是零马蒂克斯,因为它的所有值都是0。

答案 3 :(得分:1)

在Python中,隐含地声明了变量。当你输入这个:

i = 1

i设置为1的值,恰好是整数。因此,我们将i称为为整数,尽管i仅是对整数值的引用。其结果是您不需要像C ++或Java中那样的类型声明。

对于评论,您的理解大多是正确的。 []是指list。您可以将其视为链表(尽管其实际实现更接近于std::vector)。

由于Python变量通常仅引用对象,因此list是有效的引用列表,并且可能包含任何类型的值。这是有效的Python:

# A vector of numbers
vect = [1.0, 2.0, 3.0, 4.0]

但这也是完全有效的代码:

# The list of my objects:
list = [1, [2,"a"], True, 'foo', object()]

此列表包含一个整数,另一个列表,一个布尔值...在Python中,您通常依赖duck typing作为变量类型,因此这不是问题。

最后,list的一种方法是sort,正如您正确猜测的那样,就地对其进行排序,而range函数会生成一系列数字。

语法for x in L: ...迭代L的内容(假设它是可迭代的)并将变量x设置为该上下文中的每个连续值。例如:

>>> for x in ['a', 'b', 'c']:
...     print x
a
b
c

由于range会生成一系列数字,因此这实际上是生成for i = 0; i < N; i += 1类型循环的惯用方法:

>>> for i in range(4): # range(4) == [0,1,2,3]
...     print i
0
1
2
3