python学习笔记15--Lists

这一节学习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,依次类推。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值