>>>
list
=
[
2
,
5
,
8
,
9
,
3
]
>>>
list
[
2
,
5
,
8
,
9
,
3
]
>>>
list
.sort()
>>>
list
[
2
,
3
,
5
,
8
,
9
]
>>>
list
=
[
2
,
5
,
8
,
9
,
3
]
>>>
list
[
2
,
5
,
8
,
9
,
3
]
>>>
sorted
(
list
)
[
2
,
3
,
5
,
8
,
9
]
sorted(list)返回一个对象,可以用作表达式。原来的list不变,生成一个新的排好序的list对象。
list.sort() 不会返回对象,改变原有的list。
1
2
3
4
|
>>>L
=
[
2
,
3
,
1
,
4
]
>>>L.sort()
>>>L
>>>[
1
,
2
,
3
,
4
]
|
1
2
3
4
|
>>>L
=
[
2
,
3
,
1
,
4
]
>>>L.sort(reverse
=
True
)
>>>L
>>>[
4
,
3
,
2
,
1
]
|
1
2
3
4
|
>>>L
=
[(
'b'
,
6
),(
'a'
,
1
),(
'c'
,
3
),(
'd'
,
4
)]
>>>L.sort(
lambda
x,y:
cmp
(x[
1
],y[
1
]))
>>>L
>>>[(
'a'
,
1
), (
'c'
,
3
), (
'd'
,
4
), (
'b'
,
6
)]
|
1
2
3
4
|
>>>L
=
[(
'b'
,
6
),(
'a'
,
1
),(
'c'
,
3
),(
'd'
,
4
)]
>>>L.sort(key
=
lambda
x:x[
1
])
>>>L
>>>[(
'a'
,
1
), (
'c'
,
3
), (
'd'
,
4
), (
'b'
,
6
)]
|
1
2
3
4
5
|
>>>L
=
[(
'b'
,
2
),(
'a'
,
1
),(
'c'
,
3
),(
'd'
,
4
)]
>>>
import
operator
>>>L.sort(key
=
operator.itemgetter(
1
))
>>>L
>>>[(
'a'
,
1
), (
'b'
,
2
), (
'c'
,
3
), (
'd'
,
4
)]
|
1
2
3
4
5
6
|
>>>L
=
[(
'b'
,
2
),(
'a'
,
1
),(
'c'
,
3
),(
'd'
,
4
)]
>>>A
=
[(x[
1
],i,x)
for
i,x
in
enumerate
(L)]
#i can confirm the stable sort
>>>A.sort()
>>>L
=
[s[
2
]
for
s
in
A]
>>>L
>>>[(
'a'
,
1
), (
'b'
,
2
), (
'c'
,
3
), (
'd'
,
4
)]
|
>>>
print
s1[:
5
]
# 从开始到下标4 (下标5的元素 不包括在内)
>>>
print
s1[
2
:]
# 从下标2到最后
>>>
print
s1[
0
:
5
:
2
]
# 从下标0到下标4 (下标5不包括在内),每隔2取一个元素 (下标为0,2,4的元素)
>>>
print
s1[
2
:
0
:
-
1
]
# 从下标2到下标1
>>>
print
s1[
-
1
]
# 序列最后一个元素
>>>
print
s1[
-
3
]
# 序列倒数第三个元素
|
同样,如果s1[0:-1], 那么最后一个元素不会被引用 (再一次,不包括上限元素本身)
字符串是元组
字符串是一种特殊的元素,因此可以执行元组的相关操作。
1
2
|
>>>
str
=
'abcdef'
>>>
print
str
[
2
:
4
]
|
tuple元素不可变,list元素可变
序列的引用 s[2], s[1:8:2]
字符串是一种tuple,故其不可变
a
=
1
def
change_integer(a):
a
=
a
+
1
return
a
print
change_integer(a)
print
a
#===(Python中 "#" 后面跟的内容是注释,不执行 )
b
=
[
1
,
2
,
3
]
def
change_list(b):
b[
0
]
=
b[
0
]
+
1
return
b
print
change_list(b)
print
b
|
第一个例子,我们将一个整数变量传递给函数,函数对它进行操作,但原整数变量a不发生变化。
第二个例子,我们将一个表传递给函数,函数进行操作,原来的表b发生变化。
对于基本数据类型的变量,变量传递给函数后,函数会在内存中复制一个新的变量,从而不影响原来的变量。(我们称此为值传递)
但是对于表来说,表传递给函数的是一个指针,指针指向序列在内存中的位置,在函数中对表的操作将在原有内存中进行,从而影响原有变量。 (我们称此为指针传递)
class
Bird(
object
):
have_feather
=
True
way_of_reproduction
=
'egg'
def
move(
self
, dx, dy):
position
=
[
0
,
0
]
position[
0
]
=
position[
0
]
+
dx
position[
1
]
=
position[
1
]
+
dy
return
position
summer
=
Bird()
print
'after move:'
,summer.move(
5
,
8
)
类别本身还可以进一步细分成子类
比如说,鸟类可以进一步分成鸡,大雁,黄鹂。
在OOP中,我们通过继承(inheritance)来表达上述概念。
1
2
3
4
5
6
7
8
9
|
class
Chicken(Bird):
way_of_move
=
'walk'
possible_in_KFC
=
True
class
Oriole(Bird):
way_of_move
=
'fly'
possible_in_KFC
=
False
summer
=
Chicken()
print
summer.have_feather
print
summer.move(
5
,
8
)
|
新定义的鸡(Chicken)类的,增加了两个属性:移动方式(way_of_move),可能在KFC找到(possible_in_KFC)
在类定义时,括号里为了Bird。这说明,Chicken是属于鸟类(Bird)的一个子类,即Chicken继承自Bird。自然而然,Bird就是Chicken的父类。Chicken将享有Bird的所有属性。尽管我只声明了summer是鸡类,它通过继承享有了父类的属性(无论是变量属性have_feather还是方法属性move)
新定义的黄鹂(Oriole)类,同样继承自鸟类。在创建一个黄鹂对象时,该对象自动拥有鸟类的属性。
通过继承制度,我们可以减少程序中的重复信息和重复语句。如果我们分别定义两个类,而不继承自鸟类,就必须把鸟类的属性分别输入到鸡类和黄鹂类的定义中。整个过程会变得繁琐,因此,面向对象提高了程序的可重复使用性。
(回到问题1, 括号中的object,当括号中为object时,说明这个类没有父类(到头了))
建立对一个对象: 对象名 = 类名()
引用对象的属性: object.attribute
当定义类的方法时,必须要传递一个self的参数。这个参数指代的就是类的一个对象。我们可以通过操纵self,来修改某个对象的性质。比如用类来新建一个对象,即下面例子中的li_lei, 那么li_lei就被self表示。我们通过赋值给self.attribute,给li_lei这一对象增加一些性质,比如说性别的男女。self会传递给各个方法。在方法内部,可以通过引用self.attribute,查询或修改对象的性质。
这样,在类属性的之外,又给每个对象增添了各自特色的性质,从而能描述多样的世界。
1
2
3
4
5
6
7
8
|
class
Human(
object
):
def
__init__(
self
, input_gender):
self
.gender
=
input_gender
def
printGender(
self
):
print
self
.gender
li_lei
=
Human(
'male'
)
# 这里,'male'作为参数传递给__init__()方法的input_gender变量。
print
li_lei.gender
li_lei.printGender()
|
在初始化中,将参数input_gender,赋值给对象的性质,即self.gender。
li_lei拥有了对象性质gender。gender不是一个类属性。Python在建立了li_lei这一对象之后,使用li_lei.gender这一对象性质,专门储存属于对象li_lei的特有信息。
对象的性质也可以被其它方法调用,调用方法与类属性的调用相似,正如在printGender()方法中的调用。
总结
通过self调用类属性
__init__(): 在建立对象时自动执行
类属性和对象的性质的区别
实验一些list的方法:
1
2
3
4
5
6
7
|
>>>
print
nl.count(
5
)
# 计数,看总共有多少个5
>>>
print
nl.index(
3
)
# 查询 nl 的第一个3的下标
>>>nl.append(
6
)
# 在 nl 的最后增添一个新元素6
>>>nl.sort()
# 对nl的元素排序
>>>
print
nl.pop()
# 从nl中去除最后一个元素,并将该元素返回。
>>>nl.remove(
2
)
# 从nl中去除第一个2
>>>nl.insert(
0
,
9
)
# 在下标为0的位置插入9
|
总之,list是一个类。每个列表都属于该类。
python中要想处理excel,必须用到第三方模块xlrd,所以windows 我安装方法是cmd中命令:E:\ANZHUANG\Python\Scripts>easy_install xlrd (路径必须在python的scripts下和必须安装easy_install)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#coding=utf-8
import
xlrd
def
print_xls(path):
data
=
xlrd.open_workbook(path)
#打开excel
table
=
data.sheets()[
1
]
#打开excel的第几个sheet
nrows
=
table.nrows
#捕获到有效数据的行数
books
=
[]
for
i
in
range
(nrows):
ss
=
table.row_values(i)
#获取一行的所有值,每一列的值以列表项存在
#print ss
for
i
in
range
(
len
(ss)):
print
ss[i]
#输出一行中各个列的值
print
'+++++++++++++++++++'
if
__name__
=
=
'__main__'
:
print_xls(
'D:\\文档\\431547909921.xls'
)
|