我想问一下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中没有显式的变量声明。但我认为并希望我能猜出变量。
答案 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