Python基础教程(第二版)读书笔记(第二章)

本文为Python基础教程第二章读书笔记,主要讲解了序列的分片操作,包括在不同位置插入元素,以及使用append和extend方法。此外,还详细介绍了Python中的列表排序,包括内置的list排序方法和sorted函数的使用,以及如何对复杂对象进行排序。对于对象排序,文中对比了key和cmp方法的应用。
摘要由CSDN通过智能技术生成
  • 对序列进行分片操作
这样的分片操作,就类似Java中String的subString的函数。但是这里分片操作对于任何序列都是可以适用的。包括字符串,列表。
tag = '12345678'
print tag[2:5]
#345
tag = [1 , 2 , 3 , 4 , 5 , 6 , 7, 8]
print tag[2:5]
#[3, 4, 5]
这里讲讲Python中和Java的不同之处。

 在python中,分片不仅仅能取到字符串。我们还能使用分片来进行跟多的操作,例如赋值。我们能使用python中的分片功能进行赋值,这样我们能成片的修改序列中的值。如下:
# temp = [4 , 5 , 1 , 9 , 10 , 2 , 3 , 6 , 7 , 8]
temp[1:] = [1 , 2 , 3 , 4 , 5]
print temp
#[4 , 1 , 2 , 3 , 4 , 5]
print len(temp)
#6
#from x to y and exclude y
temp[1:2] = [8 , 9];
print temp
#[4 , 8 , 9 , 2 , 3 , 4 , 5]
在上面的例子中,我们可以看到。在第一个例子中,我们替换了第二个开始的全部字符串。这里替换后,temp的长度也会进行相应的变化。

当然,我们可以使用这个进行更多的操作。
  1. 在第一个插入
  2. 附加到最后一个
  3. 在中间插入
temp = [1 , 2 , 3]
#insert an element at begin
temp[0:0] = [4 , 5]
print temp
#[4 , 5 , 1 , 2 , 3]
#append to the end
temp[len(temp):] = [6 , 7 , 8]
print temp
#[4 , 5 , 1 , 2 , 3 , 6 , 7 , 8]
#insert into x place
temp[3:3] = [9 , 10]
print temp
#[4 , 5 , 1 , 9 , 10 , 2 , 3 , 6 , 7 , 8]
#replace from x to y, for instance, replace string after x

  • append, extend

对于列表形式的,我们可以使用上面两种方法在列表后面添加元素。append只能添加一个元素,但是extend可以添加多个元素,也就是可以添加一个列表上去。

temp = [1 , 2]
temp.append(3)
print temp
#[1 , 2 , 3]
temp.extend([4 , 5])
print temp
#[1 , 2 , 3 , 4 , 5]
temp.append([7 , 8 , 9])
print temp
#[1 , 2 , 3 , 4 , 5 , [7 , 8 , 9]]
对于上面的第三种,我们看到虽然我们在append函数中使用了一个列表,但是函数把列表只当做一个元素添加进去了。

  • 排序

在python中,我们可以使用list对象的方法对list进行排序。

temp = [3 , 2 , 1]
tt = temp[:]
tt.sort()
print temp
#[3 , 2 , 1]
print tt
#[1 , 2 , 3]
因为使用sort方法是对原列表进行排序的,所以会修改原list的数据。所以为了保存原来list的数据,我们先使用分片copy了一个list。

另外,我们也可以使用Python中的内置函数,sorted,这个函数不会改变原来的list,会返回一个排好序的list给我们。如下:

temp = [3 , 2 , 1]
print sorted(temp)
#[1 , 2 , 3]
print temp
#[3 , 2 , 1]
具体sort中的排序,我们可以查看下面的资料:

http://wiki.python.org/moin/HowTo/Sorting/

在资料中,我们可以看到很多种排序,例如下面对对象进行排序:

student_tuples = [
    ('john' , 'A' , 15),
	('jane' , 'B' , 12),
	('dave' , 'B' , 10)
]
print sorted(student_tuples , key = lambda student: student[2])

在这里,我们对对象进行排序。虽然在上面资料中,使用的是key的方法。但是受C++的影响,我更加喜欢使用老的cmp的方法。如下:

def student_cmp(x , y): 
    if x.grade == y.grade:
        return x.age - y.age
    else:
        if x.grade < y.grade:
		    return -1
        else:
			return 1

class Student:
	def __init__(self, name , grade, age):
		self.name = name
		self.grade = grade
		self.age = age

	def __repr__(self):
		return repr((self.name , self.grade , self.age))

student_objects = [
    Student('john' , 'A' , 15),
    Student('jane' , 'B' , 12),
    Student('dave' , 'B' , 10),
    Student('dave' , 'B' , 25),
    Student('dave' , 'A' , 20)
]

print sorted(student_objects , student_cmp)
#[('john', 'A', 15), ('dave', 'A', 20), ('dave', 'B', 10), ('jane', 'B', 12), ('dave', 'B', 25)]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值