零基础搭建量化投资系统:以Python为工具
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.5 列表及相关操作

列表也称序列,是Python中使用最频繁的数据类型。列表中的每个元素都分配一个数字,称列表位置,列表元素也称列表成员。在列表索引中,第一个索引是0,第二个索引是1,依此类推。

1.创建列表

前面我们给大家介绍了字符串数据就是一个存放单字母的特殊列表,这里介绍的列表可以存放任何数据,而且列表允许有相同的元素。

我们可以用列表推导式来创建列表,其格式如下:

        变量var = [<生成元素表达式> for <元素x>  in  <元素列表list>  if  <过滤条件>]

例如(示例3-37):

        multiples = [i for i in range(30)if i % 3 is 0]
        print(multiples)

程序运行结果:

        [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

创建列表,示例3-38。

        #列表变量一般用方括号[]或list()函数创建
        list1 = ['Google', ’股票’, 600088, 20.88, 20.88]
        list2 =[x for x in range(10)]  #列表推导式
        print(list1)
        print(list2)

程序运行结果:

        ['Google', ’股票’, 600088, 20.88, 20.88]
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2.访问列表中的元素

要访问列表中的元素,需要使用方括号连同索引或索引切片获得索引对应可用的值,见示例3-39。

        #访问列表中的元素
        list1 = ['Google', ’股票’, 600088, 20.88, 20.88]
        list2 =[x for x in range(10)]  #列表推导式
        print("list1[0]: ", list1[0])
        print("list2[1:5]: ", list2[1:5])

程序运行结果:

        list1[0]:  Google
        list2[1:5]:  [1, 2, 3, 4]

3.修改列表中的元素

由于列表有索引号,即下标,所以可以通过索引号来修改列表中的元素,见示例3-40。

        #修改列表中的元素
        list1 = ['Google', ’股票’, 600088, 20.88, 20.88]
        list1[1]=600080
        print("list1修改元素: ", list1)

程序运行结果:列表元素“股票”更新为600080。

        list1修改元素:  ['Google', 600080, 600088, 20.88, 20.88]

4.增加列表中的元素

列表append()方法可以增加列表元素,见示例3-41。

        #增加列表元素
        list1.append('Hepu')
        list1.append(2775205)
        print("list1追加元素: ", list1)

程序运行结果:

        list1追加元素:  ['Google',600080,600088,20.88,20.88, 'Hepu',2775205]

5.列表中插入元素

列表insert()方法可以插入新元素。插入后,当前索引号及后面的元素后移,见示例3-42。

        #插入列表元素
        list1 =['Google', 600080, 600088, 20.88, 20.88, 'Hepu', 2775205]
        list1.insert(5, 600080)
        print('list1插入元素: ', list1)

程序运行结果:

        list1插入元素:  ['Google', 600080, 600088, 20.88, 20.88, 600080, 'Hepu',
    2775205]

6.删除列表中的元素

删除列表中的元素有两种方式:按值删除和按索引号删除。

1)按值删除

使用列表remove()方法从表头开始删除第1个值相同的元素,后面相同的值还存在。例如,list1.remove(600080)。

2)按索引号

使用del语句按索引号删除列表中的元素。例如,del list1[0],见示例3-43。

        list1=['Google', 600080, 600088, 20.88, 20.88, 600080, 'Hepu', 2775205]
        print(’删除600080前为 : ', list1)
        list1.remove(600080)
        print(’删除第1个600080后为 : ', list1)
        list1.remove(600080)
        print(’删除第2个600080后为 : ', list1)
        del list1[0]
        print('del list1[0]后为 : ', list1)

程序运行结果:删除前,在列表list1中存在两个相同的元素600080。

        删除600080前为 :  ['Google',600080,600088,20.88,20.88,600080, 'Hepu',
    2775205]
        删除第1个600080后为 :  ['Google', 600088, 20.88, 20.88, 600080, 'Hepu',
    2775205]
        删除第2个600080后为 :  ['Google', 600088, 20.88, 20.88, 'Hepu', 2775205]
        del list1[0]后为 :  [600088, 20.88, 20.88, 'Hepu', 2775205]

7.列表相关操作

1)列表运算符“+”和“*”

在列表中,“+”和“*”运算符的作用与字符串相似,其中“+”号用于组合列表,“*”号用于重复列表。

例如示例3-44。

        a=[1,2,3,4]
        b=['a', 'b', 'c']
        c=a+b
        print('c=a+b= ', c)
        d=a*5
        print('d=', d)

程序运行结果:

        c=a+b=  [1, 2, 3, 4, 'a', 'b', 'c']
        d= [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

2)列表切片

列表切片的操作也与字符串相似。

切片格式:

        列表[start:[end:[step]]]

其中,中间的两个中括号表示可省略的参数,start表示开始位置,end表示结束位置,step表示取值步长。

下面看示例3-45。

        b=[x for x in range(10)]
        print('b= ', b)
        print('b[0]=', b[0])
        print('b[2]=', b[2])
        print('b[-2]=', b[-2])
        print('b[:5]= ', b[:5])
        print('b[5:]= ', b[5:])
        print('b[-3:]= ', b[-3:])
        print('b[:-3]= ', b[:-3])
        print('b[4:7]= ', b[4:7])
        print('b[0:10:3]= ', b[0:10:3])

程序运行结果:

        b=  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        b[0]= 0
        b[2]= 2
        b[-2]= 8
        b[:5]=  [0, 1, 2, 3, 4]
        b[5:]=  [5, 6, 7, 8, 9]
        b[-3:]=  [7, 8, 9]
        b[:-3]=  [0, 1, 2, 3, 4, 5, 6]
        b[4:7]=  [4, 5, 6]
        b[0:10:3]=  [0, 3, 6, 9]

3)列表in语句

列表in语句用来判断一个元素是否在列表中存在。如果存在则返回True,如果不存在则返回False。见示例3-46。

        #列表in语句
        print('2 in [1, 2, 3] 结果 ',2 in [1, 2, 3])
        print('5 in [1, 2, 3] 结果 ',5 in [1, 2, 3])

程序运行结果:

        2 in [1, 2, 3] 结果  True
        5 in [1, 2, 3] 结果  False

4)列表比较符“==”

列表比较符“==”能够用来比较两个列表是否相同。如果相同则返回True,否则返回False。见示例3-47。

    #列表比较符==

   a='abc'
    b="abc"
    f= a==b
    g= a! =b
    print(’列表比较f= ', f)
    print(’列表比较g= ', g)

程序结果如下:

    列表比较f=  True
    列表比较g=  False

5)列表嵌套

列表能够嵌套。嵌套列表就是列表中的元素也是一个列表。见示例3-48。

        #列表合并,列表操作符+
        a=['a',80,12.8]
        b=[1,2,3]
        c=a+b
        print('c= a+b = ', c)
        #列表操作符*
        d=[1,2]
        e=d*3   #注意不是列表元素值*3,是列表元素个数*3
        print('e= d*3 = ', e)
        #列表in语句
        print('2 in [1, 2, 3] 结果 ',2 in [1, 2, 3])
        #列表切片
        print(’切片c[2] ', c[2])
        print(’切片c[-2] ', c[-2])
        print(’切片c[1:] ', c[1:])
        #列表比较符==
        f= a==b
        print(’列表比较f= a==b = ', f)
        #嵌套列表
        x = ['a', 'b', 'c']
        y = [1, 2, 3]
        z = [x, y]
        print(’嵌套列表z= ', z)

程序运行结果:

        c= a+b=  ['a', 80, 12.8, 1, 2, 3]
        e= d*3 =  [1, 2, 1, 2, 1, 2]
        2 in [1, 2, 3] 结果  True
        切片c[2]  12.8
        切片c[-2]  2
        切片c[1:]  [80, 12.8, 1, 2, 3]
        列表比较f= a==b =  False
        嵌套列表z=  [['a', 'b', 'c'], [1, 2, 3]]

8.列表相关函数和方法

列表相关函数的种类及意义见表3-22。

表3-22 列表相关函数和方法

9.列表迭代操作

Python的迭代操作就是利用列表有序特性进行迭代输出。

迭代器是一个可以记住遍历位置的对象。

迭代器从列表的第一个元素开始访问,直到所有的元素被访问完,而且只能往前不会后退。字符串、列表和元组对象都可用于创建迭代器。

迭代器有两个基本函数:iter()函数和next()函数。

iter()函数:创建迭代器对象,并且指针指向第一个元素。

next()函数:输出当前指针元素,并且使迭代器指针指向下一个元素。

一般我们用for语句作列表遍历操作。可参见示例3-49。

        list1=[x for x in range(10)]
        #使用for循环
        for i in list1:
            print(i, end=" ")

如果使用迭代器,就可以使用while语句作列表遍历操作。见示例3-50。

        list1=[x for x in range(10)]
        #使用迭代器,用while循环
        it = iter(list1)
        i=0
        while i<len(list1):
            print(next(it), end=" ")
            i+=1

上面两个程序运行的结果是相同的。

上面复杂的循环操作,只需要一行for循环语句就能实现。见示例3-51。

        list1=[x for x in range(10)]
        #使用for循环
        print(’使用for循环’)
        for i in list1:
            print(i*2, end=" ")
        print()
        #使用迭代器,用while循环
        print(’使用迭代器,用while循环’)
        it = iter(list1)
        i=0
        while i<len(list1):
            print(next(it)*2, end=" ")
            i+=1
        print()
        #for循环语句迭代命令
        print('for循环语句命令’)
        for x in list1: x=x*2; print(x, end=" ")

程序运行结果:

        使用for循环
        0 2 4 6 8 10 12 14 16 18
        使用迭代器,用while循环
        0 2 4 6 8 10 12 14 16 18
        for循环语句命令
        0 2 4 6 8 10 12 14 16 18