这一节学习python的list类型,python的基本数据类型都只能存储一个变量的数据,如果需要存储多个数据,list复合结构类型是个不错的选择。list的形式是用[]括起来,里面的数据类型没有限制,且可以互不相同,还可以嵌套其它复合数据类型,如 a = [123, "456"], b = ["abc", a , a]。
1. 创建lists
list类型可以由构造函数创建,也可以直接创建,如 list1 = list() (等价于 list1 = []), list2 = list([2,3,4])(等价于 list2 = [2,3,4]),list3 = list("abcd")(等价于list3=['a','b','c','d']),通常来说可以直接创建的也可以由构造函数创建,但反过来并不一定成立,比如 list4 = list(range[3,100]),这个直接创建就有些麻烦,可以用循环.append创建。
2. lists的常见操作
在python中,lists和strings都是sequence(序列)类型,一个string是字符的序列,而一个list是任意类型的序列。所以list和string一样有许多类似的序列操作,列举如下:
x in list :判断x是否在list中,在为True,否则为False;
x not in list:与上一个相反;
list1 + list2:连接list1和list2;
list * n, n * list:重复list,n次,并连接;
list[i]:返回下标为i的元素,从0开始;
list[i:j]:返回从下标i到j-1的元素;
len(list):list的长度,即元素个数;
min(list),max(list):list中的最小,最大元素;
sum(list):list中元素和,仅限数字类型;
for loop:遍历list;
<, <=, >, >=, ==, !=:比较两个lists大小;
1)len,min,sum,max,shuffle
# len, min, max, sum, shuffle
list1 = [1,3,5,7,9]
print (len(list1)) # 5
print (max(list1)) # 9
print (min(list1)) # 1
print (sum(list1)) # 25
import random
random.shuffle(list1) #随机打乱list1的顺序
print (list1) # [1, 7, 5, 3, 9]
2)in, not in, +, *
# in, not in, list1 + list2, list * not
list1 = [1,3,5]
list2 = [2,4,6]
print (1 in list1) # True
print (2 not in list2) # False
list3 = list1 + list2
print (list3) # [1,3,5,2,4,6]
list4 = list1 * 2 + list2 * 2
print (list4) # [1,3,5,1,3,5,2,4,6,2,4,6]
3)index 下标
# index i
list = [1,4,7,2,5,8,3,6,9]
print (list[1]) # 4
print (list[-1]) # 9
list[1] = list[0] + list[2]
print (list[1]) # 8
print (list[-10]) # error
要注意的是,下标不管是正还是负,都不要越界,[:]不受界限限制。
4)[i:j]
# [i:j]
list = [2,3,5,7,9,11]
print (list[2:4]) # list[2] and list[3] [5,7]
print (list[2:-1]) # == list[2:(-1)+len(list)] == list[2:5] [5,7,9]
print (list[:-1]) # [2,3,5,7,9]
print (list[-100:100]) # [2,3,5,7,9,11]
当:左边或右边越界时,会自动变成从最左或最右开始(包括)。
5)比较--按字典序大小比较,从第一个元素开始比较,若相等,再继续往下一个比较
# comparing lists
list1 = ["green", "red", "blue"]
list2 = ["red", "blue", "green"]
print (list1==list2) # False
print (list1<list2) # True
print (list1>=list2) # False
6)for 循环
# for loop
list1 = [1,2,3]
for l in list1:
print (l,end=" ") # 1 2 3
7)copy操作
会有人用 list2 = list1这种方式,想将list1中的元素拷贝到list2中,但是这种方式是不可行的,它只是拷贝了list1的引用到list2,当修改list1中的元素时,list2也会改变;即list2只是list1的副本。下面的小例子可以更清晰的表示:
# copy list
list1 = [1,2,3]
print (id(list1)) #3073347308
list2 = [4,5,6]
print (id(list2)) #3073344908
list2 = list1
print (id(list2)) #3073347308
list1[1] = 7
print (list1) #[1, 7, 3]
print (list2) #[1, 7, 3]
所以通常我们用 list2 = [x for x in list1] 或者更简单的 list2 = [] + list1来执行copy操作。
8)+,*,in,not in操作
+:将两个list中的元素放在一起;
*:对一个list中的元素复制n次;
in:判断某个元素是否在list中;
not in:判断是否不在list中;
举个小例子:
# +, *, and in/not operators
list1 = [2,3]
list2 = [1,9]
list3 = list1 + list2
list4 = list1 * 3
print (list3) # [2,3,1,9]
print (list4) # [2,3,2,3,2,3]
print (2 in list1) # True
print (2 not in list2) # True
9)list 的几个内置函数
append(x) :将对象x作为元素添加在list的尾部,其中x可以为单个元素,也可以为其它类型,如list;
count(x):计算list中包含元素x的次数;
extend(l):将列表l的元素添加到list中,由此可以看出与append的区别;
index(x,[start,[stop]]):查找元素x在list中第一次出现的下标,其中start,stop表示查找起始和结束位置;
insert(index, x):在list中下标index处插入元素x;
pop(x):移除list中下标为x的元素,并返回该元素的值;x不给出时,默认移除最后一个元素;
remove(x):移除list中第一个出现的x元素;
reversse():list转置;
sort():list排序
下面举个小例子:
# List Methods
# append
list1 = [2,3,4,1,32,4]
list1.append(19)
print (list1) # [2, 3, 4, 1, 32, 4, 19]
# count
print (list1.count(4)) # 2
# extend
list2 = [99,54]
list1.extend(list2)
print (list1) # [2, 3, 4, 1, 32, 4, 19, 99, 54]
# index
print (list1.index(4)) # 2
# insert
list1.insert(1, 25)
print (list1) # [2, 25, 3, 4, 1, 32, 4, 19, 99, 54]
# pop
print(list1.pop(2)) # 3
print(list1) # [2, 25, 4, 1, 32, 4, 19, 99, 54]
# remove
list1.remove(32)
print(list1) # [2, 25, 4, 1, 4, 19, 99, 54]
# reverse
list1.reverse()
print (list1) # [54, 99, 19, 4, 1, 4, 25, 2]
# sort
list1.sort()
print (list1) # [1, 2, 4, 4, 19, 25, 54, 99]
中间间隔了这么久才继续学习python,真是汗颜啊。。。还是要继续学习,把基础过一遍。
Multidimensional list,最简单的就相当于二维数组,或者矩阵,但它的操作和numpy中的矩阵操作还是有很大区别的,后续学习numpy时再比较。
二维list就是将之前线性的元素替换成一个一维list,如[[1,2,3], [4,5,6], [7,8,9]] 首先学习一下它的创建:
#随机数初始化二维list
import random
matrix = []
numberOfRows = eval(input("Enter the number of rows: "))
numberOfColumns = eval(input("Enter the number of columns: "))
for row in range(numberOfRows):
matrix.append([])
for column in range(numberOfColumns):
matrix[row].append(random.randint(1,99))
print (matrix)
调用二维list的sort()函数,它按每行中的第一个元素排序,然后按第二个,依次类推... 举个例子
points = [[4,2],[1,7],[4,5],[1,2],[1,1],[4,1]]
points.sort()
print (points) #[[1, 1], [1, 2], [1, 7], [4, 1], [4, 2], [4, 5]]
多维list就是不断的嵌套list,三维list就是以二维list为元素的list,依次类推。