线性结构(列表、元组、字符串、bytes、bytearray )

python 线性结构.png

一.列表

  • 一个队列,一个排列整齐的队伍
  • 列表内的个体称为元素
  • 元素可以是任意对象(数字,字符串,对象,列表等)
  • 列表内元素有顺序,可以使用索引,支持负索引
  • 线性的数据结构
  • 使用[ ] 表示
  • 列表是可变的

1.列表初始化

  • lst = list()
  • lst = []
  • lst = list(range(5))
  • lst = list(str) #遍历字符串里面的字符

2.列表常用的方法

①index(value, [start, [stop]])
  • 从指定区间查看列表内的元素是否匹配。区间[ )
  • 匹配到第一个值就返回该值的索引
  • 匹配不到就会出现ValueError错误
  • 时间复杂度是O(n).
②count(value)
  • 返回列表中value 的出现的次数。
  • 时间复杂度是O(n).
③append(value)
  • 列表尾部追加元素,返回None
  • 直接修改列表
  • 只接受一个参数,并且直接将该参数作为一个元素追加到列表尾部
  • 时间复杂度是O(1)
④ 索引访问修改元素
  • list[index] = value
  • 索引不能超界
⑤insert(index,value)
  • 在指定的的索引index前插入新的元素
  • 直接修改列表,返回None
  • 时间复杂度O(n)
  • 越界,就近追加
⑥ extend(iteratable)
  • 就地追加,返回None
  • 遍历可迭代对象中元素追加到列表尾部(extend list by appending elements from the iterable )
  • 时间复杂度O(1)
  • 通过"+=" 就地修改列表,增加元素
⑦ 通过 “+” 生成一个新的列表
  • 连接两个列表
  • 产生新的列表,原列表不变
  • 本质上调用了add()方法
  • 消耗内存空间
⑧ 通过 “*” 生成一个新的列表
  • 将列表内的元素重复n次,返回新列表
  • 元素如果是单值:数字,整型,字符串等,简单重复
  • 元素如果是引用类型:列表等。重复n次,复制n个引用元素,每个元素指向同一个内存地址。如果修改某一个元素里面的数据,即其他指向同一个内存地址的元素的值也会改变。
>>> li1 = [1,2]*3
>>> li1
[1, 2, 1, 2, 1, 2]
>>> li1[2] = 4
>>> li1
[1, 2, 4, 2, 1, 2]
>>> li2 = [[1,2]] * 3
>>> li2
[[1, 2], [1, 2], [1, 2]]
>>> id(li2[0])
140329691450248
>>> id(li2[1])
140329691450248
>>> id(li2[2])
140329691450248
>>> li2[1][0] = 4
>>> li2
[[4, 2], [4, 2], [4, 2]]
>>> li2[0] = 100
>>> li2
[100, [4, 2], [4, 2]]
>>> id(li2[0])
9095328
>>> id(li2[1])
140329691450248
>>> id(li2[2])
140329691450248
⑨remove(value)
  • 从左到右查找,并删除第一个匹配的value
  • 就地修改
  • 时间复杂度O(n)
⑩pop([index])
  • 不指定index,pop()默认从列表尾部弹出一个元素,返回该元素。O(1)
  • 指定index,弹出该元素,索引超界则报错IndexError. O(n),将改变列表其他元素的索引
⑪clear()
  • 清除列表所有元素
  • lst.clear() 等价 lst = []
  • 返回None
⑫reverse()
  • 直接修改列表,返回None
  • 将列表元素反转
  • 挪动全部元素,不建议,效率比遍历差
⑬sort(key =None,reverse=False)
  • 元素排序,默认升序
  • 直接修改列表,返回None
  • reverse=True ,降序
  • key 一个函数,指定key 如果排序。会按照key 指定的类型,做隐式转换,才能比较大小。
    lst.sort(key=functionname)
⑭ in 遍历列表
  • [3,4] in [1,2,[3,4] -> True
  • for i in [1,2,3,4]
⑮copy()
  • shadow copy 返回一个新的列表
    遇到引用类型,只是复制了一个引用
  • 可以使用copy.deepecopy(lst) 深拷贝

二.元组

  • 一个有序的元素组成的,可索引,支持负索引
  • 元素可以是任意对象
  • 使用() 表示
  • 元组定义后是不可以改变的

1.元组初始化

  • t = tuple()
  • t = tuple(iterable)
  • t = (1,) #单个元素后一定要加上‘,’

2.元组常用方法

①index(value, [start, [stop]])
  • 从指定区间查看列表内的元素是否匹配。区间[ )
  • 匹配到第一个值就返回该值的索引
  • 匹配不到就会出现ValueError错误
  • 时间复杂度是O(n).
②count(value)
  • 返回列表中value 的出现的次数
  • 时间复杂度是O(n)

元组只读,只有查询方法

3.namedtuple 命名元组

  • 在collections 模块中存在namedtuple 函数。该函数返回一个元组的子类,并定义了字段
  • namedtuple(typename, field_names, verbose=False, rename=False)
    field_names可以是空白符或逗号分割的字段的字符串,可以是字段的列表
>>> from collections import namedtuple
>>> Point = namedtuple('_Point',['x','y']
... )
>>> from collections import namedtuple
>>> Point = namedtuple('_Point',['x','y'])  #Point 是类型名,_Point 是标识符
>>> type(Point)
<class 'type'>
>>> p = Point(11, 22)
>>> type(p)
<class '__main__._Point'>
>>> p
_Point(x=11, y=22)
>>> p.x

三.字符串

  • 字符串是一组有序的字符组成的序列
  • 是线性结构,可以索引,支持索引
  • 字符串是不可以改变的
  • Python3 字符串默认是Unicode类型

1.str初始化

  • s = 'str1'
  • s= "str2 "
  • s= """long str3 """
  • s = r"hello \n magedu.com" #raw string,不要在意字符串中的特殊符号
  • s = R"c:\windows\nt" #raw string不要在意字符串中的特殊符号

2.str常用的方法

①.index(value, [start, [end]])
  • 在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到抛出异常ValueError
  • rindex(value, [start, [end]])
    在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到抛出异常ValueError
  • O(n)
②count(value)
③ in 遍历字符
④"string".join(iterable)
  • 将可迭代对象连接起来,使用string作为分隔符
  • 可迭代对象本身元素都是字符串
  • 返回一个新字符串
⑤通过 “+” 生成一个新的str
  • 产生新的str,原str不变
⑥split(sep=None, maxsplit=-1)
  • 从左到右分割
  • sep 指定分割字符串,缺省的情况下空白字符串(一个或者多个)作为分隔符
  • maxsplit 指定分割的次数,-1 代表遍历整个字符串
  • 返回新列表
  • rsplit(从右到左)
  • splitlines([keepends])
    1.按照行分割字符串
    1. keepends 指是否保留换行符[True|False],默认为 False,不包含换行符
      3.换行符:\n、\r\n、\r等
⑧partition(sep)
  • seq 指定分隔符
  • 从左到右,遇到分隔符就把字符串分割成两部分,返回头、分隔符、尾三部分的三元组(head, sep, tail)
  • 如果没有找到分隔符,就返回头、2个空元素的三元组
  • rpartition(sep)
    从右至左,遇到分隔符就把字符串分割成两部分,返回头,分隔符,尾三部分的三元组,如果没有找到分隔符,就返回2个空元素的三元组
⑨replace(old,new,[count])
  • 字符串中找到匹配的oldstr 替换成newstr,返回新的字符串
  • count 默认全部替换,可以指定替换几次
⑩strip([chars])
  • 从字符串两端去除指定的字符集chars中的所有字符,默认去除两端的空白字符
  • 返回一个新的字符串
  • 效率较高
  • lstrip 从左开始
  • rstrip 从右开始
⑪find(sub,[start,[end]])
  • 在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到返回-1
  • rfind(sub[, start[, end]])
    在指定的区间[start, end),从右至左,查找子串sub。找到返回索引,没找到返回-1
⑫字符串大小写
  • upper(),全大写
  • lower(),全小写
  • swapcase(),交互小大写
⑬ 字符串排版
  • title() -> str 标题每个单词大写
  • capitalize() -> str 首个单词大写
  • center(width,[fillchar]) -> str
    width 宽度
    fillchar 填充的字符
    (菱形打印)
  • zfill(width) -> str 指定宽度右对齐,左边用0填充
  • ljust(width,[fillchar]) -> str 左对齐
  • rjust(width,[fillchar]) -> str 右对齐
n = 7
for i in range(-n//2,n//2+1):
    if i < 0:
        i = -i
    s = '*'*(n-2*i)
    print(s.center(n,' '))
   *
  ***
 *****
*******
 *****
  ***
   *
⑭ endswith(suffix,[start,[end]]) -> bool
  • 在[start,end) 区间判断字符串是否以suffix 结尾
  • startswith(prefix,[start,[end]]),判断字符是否以prefix 开头
⑮字符串判断
  • isalnum() -> bool 是否是字母和数字组成
  • isalpha() 是否是字母
  • isdecimal() 是否只包含十进制数字
  • isdigit() 是否全部数字(0~9)
  • isidentifier() 是不是字母和下划线开头,其他都是字母、数字、下划线  islower() 是否都是小写
  • isupper() 是否全部大写
  • isspace() 是否只包含空白字符

四. bytes,bytearray (python3)

  • bytes 是不可变的字节序列
  • bytearry 是可变的字节数组
  • 所有的文件都是字节序列,所有的数据都可以当文本处理

1. 编码和解码

  • 字符串按照不同的字符集编码encode返回字节序列bytes
  • 字节序列按照不同的字符集解码decode 返回字符串

2.bytes定义

  • bytes() 空bytes
  • bytes(int) 指定bytes 的长度,以b'0 填充
  • bytes(iterable of ints) 指定bytes字节的内容 # int 范围在[0,255]之间
  • bytes(string,encoding,[errors]) 等价string.encode() 返回新bytes
  • bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer 从一个字节序列或者buffer复制出一个新的不可变的bytes对象
  • 使用b前缀定义
    如果字符存在ASCII中即以字符形式存在,否则用16进制表示 。

3.bytes常用的方法

  • replace()
    b'abcdef'.replace(b'f',b'k')
  • find()
    b'abc'.find(b'b')
  • bytes.fromhex(string)
    string必须是2个字符的16进制的形式,'6162 6a 6b',空格将被忽略
  • hex()
    返回16进制表示的字符串
    'abc'.encode().hex()
  • 索引
    b'abcdef'[2] 返回该字节对应的十进制的数字,int类型

4.bytearray 定义

  • bytearray() 空bytearray
  • bytearray(int) 指定字节的bytearray,被0填充
  • bytearray(iterable_of_ints) -> bytearray [0,255]的int组成的可迭代对象
  • bytearray(string, encoding[, errors]) -> bytearray 近似string.encode(),不过返回可变对象
  • bytearray(bytes_or_buffer) 从一个字节序列或者buffer复制出一个新的可变的bytearray对象

3.bytearray 操作

  • append(int) int 是字节的整型
  • insert(index, int) 在指定索引位置插入元素
  • extend(iterable_of_ints) 将一个可迭代的整数集合追加到
    当前bytearray
  • pop(index=-1) 从指定索引上移除元素,默认从尾部移除
  • remove(value) 找到第一个value移除,找不到抛ValueError异常
  • clear() 清空bytearray
  • reverse() 翻转bytearray,就地修改

4.int和bytes

  • int.from_bytes(bytes, byteorder)
    将一个字节数组表示成整数
  • int.to_bytes(length, byteorder)
    byteorder字节序 (一般是'big')
    将一个整数表达成一个指定长度的字节数组
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容