- 对序列进行分片操作
这样的分片操作,就类似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的长度也会进行相应的变化。
当然,我们可以使用这个进行更多的操作。
- 在第一个插入
- 附加到最后一个
- 在中间插入
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)]