6

我想问一下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

4 回答 4

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]
于 2013-10-17T16:14:25.367 回答
1

在 Python 中,变量是隐式声明的。当您键入以下内容时:

i = 1

i设置为 的值1,恰好是一个整数。所以我们会说它i一个整数,尽管i它只是一个整数值的引用。这样做的结果是您不需要像 C++ 或 Java 中那样的类型声明。

至于评论,您的理解大多是正确的。[]指一个列表。您可以将其视为一个链表(尽管它的实际实现更接近于std::vectors 例如)。

由于 Python 变量通常只是对对象的引用,list因此 s 是有效的引用列表,并且可能包含任何类型的值。这是有效的 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 中,您通常依赖鸭子类型来输入变量类型,所以这不是问题。

list最后, is的方法之一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
于 2013-10-17T16:19:46.473 回答
1

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

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

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

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

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

于 2013-10-17T16:15:26.850 回答
1

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

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

结果矩阵是一个零矩阵,因为它的所有值都是 0。

于 2013-10-17T16:16:19.150 回答