繁簡切換您正在訪問的是FX168財經網,本網站所提供的內容及信息均遵守中華人民共和國香港特別行政區當地法律法規。

FX168财经网>人物频道>帖子

Python入门(2)- 数据类型之列表

作者/大师做交易 2019-05-10 07:14 0 来源: FX168财经网人物频道

这是面向新用户的 Python 教程,并结合了 JoinQuant 获取到的数据进行了讲解。

如果你之前没有学过 Python, 或者对 Python 不熟,那不要再犹豫了,这个教程就是为你准备的!

更多内容请查看量化课堂 - Python编程板块。

本节概要: 介绍了列表的主要用法

【Python入门(2)】基本语法-数据类型之列表¶

新手在使用平台进行量化策略实现时,往往会被各种数据类型搞乱,不知道目前获取的数据是什么类型的,可以使用什么方法,所以梳理了一下。

在Python中有多种内建的数据结构,我们这里经常遇到的会有列表、字典、集合和元组,第三方库pandas还提供DataFrame和Series。

将逐步详细介绍列表、字典、集合、元组、DataFrame和Series的基本使用方法和小技巧,然后介绍在使用平台获取数据时不同数据类型的转换。

Python内嵌的数据类型主要包括以下两类:¶

有序:¶

List(列表),是有序集合,没有固定大小,可以通过对偏移量以及其他方法修改列表大小。列表的基本形式如:[1,2,3,4]

Tuple(元组),是有序集合,是不可变的,可以进行组合和复制运算后会生成一个新的元组。元组的基本形式比如:(1,3,6,10)

String(字符串),也是有序集合,字符串的基本形式比如:’hello’,这里不进行具体介绍。

无序:¶

Set(集合),是一个无序不重复元素的集。基本功能包括关系运算和消除重复元素。集合的基本形式如:set('abracadabra')

Dictionary(字典)是无序的键:值对 (key:value 对)集合,键必须是互不相同的(在同一个字典之内)。字典的基本形式如:{'jack': 4098, 'sape': 4139}

首先对列表进行介绍。

列表¶

List(列表) 是 Python 中最通用的序列。列表是一个任意类型对象位置的相关有序集合,它没有固定大小。不像字符串,其大小是可以变的,通过对偏移量进行赋值以及其他各种列表的方法进行调用,可以修改列表大小。

索引是从0开始而非1开始!!¶

列表中值的分割用变量[头下标:尾下标],就可以截取相应的列表,从左到右索引默认“0”开始的,从右到左索引默认-1开始,下标可以为空表示取到头或尾。可以对列表进行索引、切片等操作,看下面例子。

# 定义列表L
L = [1,2,3,4,5,6,7,8,9]

# 使用len()函数查看列表的长度
len(L)
9

①列表索引:

print L[0]
print L[-1] # 负数表示从后数第几个元素,-1即为列表的最后一个元素
1
9

②列表切片: (注意:切片并不会取到“尾下表”那个数)

L[1:5]
[2, 3, 4, 5]

③ +操作可以拼接列表

L + [2,3,4]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4]

Python 的列表数据类型包含更多的方法。¶

list.append(x) 把一个元素添加到列表的结尾。

list.extend(L) 将一个给定列表中的所有元素都添加到另一个列表中。

list.insert(i, x) 在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x)。

list.remove(x) 删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。

list.pop([i]) 从列表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop() 返回最后一个元素。元素随即从链表中被删除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,这个经常会在 Python 库参考手册中遇到这样的标记。)

list.index(x) 返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。

list.count(x) 返回 x 在链表中出现的次数。

list.sort(cmp=None, key=None, reverse=False) 对列表中的元素进行排序(参数可以用来自定义排序方法,参考 sorted() 的更详细的解释)。

list.reverse() 就地倒排链表中的元素

del list[i] 有个方法可以从列表中按给定的索引而不是值来删除一个子项:del 语句。它不同于有返回值的 pop() 方法。语句 del 还可以从列表中删除切片或清空整个列表(我们以前介绍过一个方法是将空列表赋值给列表的切片)。

# 统计a中元素出现的次数
a = [1, 2, 3, 3, 1234.5]
print 'a中 1 出现的次数:',a.count(1)
print 'a中 3 出现的次数:',a.count(3) 
print 'a中 x 出现的次数:',a.count('x')
a中 1 出现的次数: 1
a中 3 出现的次数: 2
a中 x 出现的次数: 0
# 在a的尾部添加元素
a.append(555)
a
[1, 2, 3, 3, 1234.5, 555]
# 将[7,8,9]于a进行拼接
a.extend([7,8,9])
a
[1, 2, 3, 3, 1234.5, 555, 7, 8, 9]
# 在a中第三个位置插入-1
a.insert(2, -1)
a
[1, 2, -1, 3, 3, 1234.5, 555, 7, 8, 9]
# 返回2在a中的位置
a.index(2)
1
# 反向排列a
a.reverse()
a
[9, 8, 7, 555, 1234.5, 3, 3, -1, 2, 1]
# 对a进行排序,默认为升序!
a.sort()
a
[-1, 1, 2, 3, 3, 7, 8, 9, 555, 1234.5]
# 逆序排列a
a.sort(reverse=True)
a
[1234.5, 555, 9, 8, 7, 3, 3, 2, 1, -1]
# 删除列表a中值为 3 的第一个元素
a.remove(3)
a
[1234.5, 555, 9, 8, 7, 3, 2, 1, -1]
# 删除a中索引为0的元素
del a[0]
a
[555, 9, 8, 7, 3, 2, 1, -1]
# 删除a中索引为 2:4 的元素
del a[2:4]
a
[555, 9, 3, 2, 1, -1]

del 也可以删除整个变量,此后再引用命名 a 会引发错误(直到另一个值赋给它为止)。我们在后面的内容中可以看到 del 的其它用法。

del a
a
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-16-ef9d13752aff> in <module>()
      1 del a
----> 2 a

NameError: name 'a' is not defined

把列表当作堆栈使用¶

列表方法使得列表可以很方便的做为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈中。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。例如:

stack = [3, 4, 5]
stack.append(6)
stack.append(7)
stack
[3, 4, 5, 6, 7]
stack.pop()    #后进先出
7
stack
[3, 4, 5, 6]
print stack.pop()
print stack.pop()
print stack
6
5
[3, 4]

把列表当作队列使用¶

你也可以把列表当做队列使用,队列作为特定的数据结构,最先进入的元素最先释放(先进先出)。不过,列表这样用效率不高。相对来说从列表末尾添加和弹出很快;在头部插入和弹出很慢(因为为了一个元素,要移动整个列表中的所有元素)。

要实现队列,使用 collections.deque,它为在首尾两端快速插入和删除而设计。例如:

from collections import deque
queue = deque(["Eric", "John", "Michael"])
queue.append("Terry")
queue.append("Graham")
queue
deque(['Eric', 'John', 'Michael', 'Terry', 'Graham'])
print queue.popleft()                 # 先到的先出
print queue.popleft()
print queue
Eric
John
deque(['Michael', 'Terry', 'Graham'])

这一节就学到这里就结束了。

下一节会向大家介绍数据类型的另一个重要成员——字典!

分享到:
举报财经168客户端下载

全部回复

0/140

投稿 您想发表你的观点和看法?

更多人气分析师

  • 张亦巧

    人气2144文章4145粉丝45

    暂无个人简介信息

  • 梁孟梵

    人气2152文章3177粉丝39

    qq:2294906466 了解群指导添加微信mfmacd

  • 指导老师

    人气1856文章4423粉丝52

    暂无个人简介信息

  • 李冉晴

    人气2296文章3821粉丝34

    李冉晴,专业现贷实盘分析师。

  • 刘钥钥1

    人气2016文章3119粉丝34

    专业从事现货黄金、现货白银模似实盘操作分析指导

  • 张迎妤

    人气1896文章3305粉丝34

    个人专注于行情技术分析,消息面解读剖析,给予您第一时间方向...

  • 金泰铬J

    人气2320文章3925粉丝51

    投资问答解咨询金泰铬V/信tgtg67即可获取每日的实时资讯、行情...

  • 金算盘

    人气2696文章7761粉丝125

    高级分析师,混过名校,厮杀于股市和期货、证券市场多年,专注...

  • 金帝财神

    人气4728文章8329粉丝118

    本文由资深分析师金帝财神微信:934295330,指导黄金,白银,...