基础数据结构方法汇总

字符串方法:
mystr.capitalize() 第一个字符转换为大写,其它都转为小写(本来的大写字母也转为小写) "ab C d" --> Ab c d

 

a_str = 'hello hello'

# 1.统计字符串长度
len(a_str)  # 长度 11

# 2.统计某子字符串出现的次数
a_str.count('ll')  # 2       子字符串 ll  在 a_str 中出现了 2 次
a_str.count('abc')  # 0     子字符串 abc  在 a_str 中出现了 0 次

# 3.查找某子字符串(第一次)出现的位置
a_str.index('lo')  # 3   子字符串 lo 第一次在 a_str 中出现的索引为 3
a_str.index('abc')  # 出错 ValueError: substring not found
a_str.index('lo', 4)  # 9    起始索引为4,子字符串 lo 第一次出现的索引为 9。
a_str.index('lo', 4, 8)  # ValueError: substring not found  范围 4~8 之间找不到子字符串

# 4.判断类型的方法
a_str.isspace()  # ' \n\r\t'.isspace()  # True  空格、换行、回车、制表符  print(' \n \r\r \t'.isspace())  True
a_str.isalpha()  # 非空,且都为字母,返回 True
a_str.isalnum()  # 判断是否为 alpha 和 number
a_str.isdecimal()  # 只含数字、全角数字  print('0o12'.isdecimal())  # False    不能判断小数
a_str.isdigit()  # 只含数字、全角数字、⑴、\u00b2   不能判断小数
a_str.isnumeric()  # 只含数字、全角数字、汉字数字 一二三     不能判断小数
a_str.istitle()
a_str.islower()
a_str.isupper()

a_lst = [1, 1.1, '1', '⑴', '\u00b2', 'Ⅲ', '一千二百']  # 整数、小数、全角....
b_lst = ['isdecimal', 'isdigit', 'isnumeric']
for f in b_lst:
    for n in a_lst:
        func = f"'{n}'.{f}()"
        print(eval(func), end='\t')
    print()

# 5.查找和替换
a_str.startswith('he')  # True    # a_str.startswith('He')   False  区分大小写
a_str.endswith('he')  # False
a_str.find('li')  # 2    # a_str.find('li')  不存在的字符串,不会像 index 报错,而是返回 -1
a_str.find('li',5)  # 从5开始查找
a_str.find('li',5,9)  # 查找 5-9 之间的元素  (不含9元素:范围前闭后开)
a_str.rfind('llo')  # 8 从 右边 开始查找
a_str.index('l')
a_str.rindex('l')
new_str = a_str.replace('llo', 'new')  # 需要用变量接收结果  # henew henew

'ab' in 'abcd'

# 6.大小写转换
a_str.capitalize()
a_str.title()
a_str.lower()
a_str.upper()
a_str.swapcase()

# 7.文本对齐
a_str.center(width)  # a_str.center(width,'-') 用 - 填充
a_str.ljust(width)
a_str.rjust(width)

# 8.去除空白
a_str.strip()  # print('\n  \t \rTink this \t'.strip())  # 左右两端的空格、换行、回车、制表符被去掉。Tink this
a_str.lstrip()
a_str.rstrip()

# 9.拆分和连接
a_str.split()  # print("this\nis a\rcat\tand".split())  # ['this', 'is', 'a', 'cat', 'and'] 返回列表
a_str.split('ll')  # ['he', 'o he', 'o']  # 无参数 默认 空格分割
a_str.join()  # ''.join(序列)
a_str.splitlines()  # 按行切分
a_str.partition('ll')  # ('he', 'll', 'o hello')  返回一个3元的元组
a_str.rpartition('ll')  # ('hello he', 'll', 'o')  从右边开始

  

另有: 'ab' in 'abcd'

   

列表方法:(增删查改)

新增:

lst.append(obj)  在末尾追加数据

lst.insert(下标,obj) 如果下标不存在,则会插入到列表的末尾。支持反向索引,超出范围就会在列表的头部

lst.extend(obj) 

print([1, 2] + [3, 4])  # [1, 2, 3, 4]
print(['a', 'b'] + [1, True])  # ['a', 'b', 1, True]

  

lst = list("HIL")  # ['H', 'I', 'L']
lst[1:1] = list("Tom")  # ['H', 'T', 'o', 'm', 'I', 'L']
lst[2:4] = []  # ['H', 'T', 'I', 'L']

 

  

 

删除:

lst.pop() 删除最后一个元素 相当于lst.pop(-1)
lst.pop(下标) 若下标不存在,IndexError
lst.remove(obj) 若obj不存在,则会引发ValueError异常

del lst[下标]   若下标不存在,IndexError

lsr.clear() 清空列表

 

修改:

lst[下标] = obj

lst.count(obj) 元素obj不存在,结果为0
lst.index(obj) 元素obj不存在,则会引发ValueError异常
lst.reverse() 元素翻转
lst.sort()

列表元素查找:
in、not in
count 结合 index 使用

index = a_list.index('a') if ('a' in a_list) else -1
[x for x in test if 'a' in x]

 lst.append(obj)

 https://runestone.academy/ns/books/published/thinkcspy/index.html

ThinkCSPY

 https://runestone.academy/ns/books/published/pythonds/index.html

PythonDS 

 

# 字典:键不可变类型;键不重复,键重复会覆盖;3.6版本以后的字典是有序的

d1 = {}  # 定义空字典
d2 = dict()  # 定义空字典
d3 = {
    "name": "王大锤",  # 键必须不可变(不可变类型:int、bool、str、tuple等;可变类型:list、set、dict)
    "age": 12,
    "hobby": ['看书', '画画'],  # 值可以是列表
    123: 990,  # 键为 int 类型 123
    (123,): {"ad1": "浦西", "ad2": "浦东"},  # 键为 tuple类型。 值可以是字典
    True: "孙悟空",
    1: "齐天大圣"  # 1 会把上一条 True 覆盖掉。   True 和 1 等效
}
# 通过 dict.fromkeys(seq[, value])) 创建字典
d4: dict = dict.fromkeys(['A', 'B'])  # {'A': None, 'B': None}  默认值为None
d5: dict = dict.fromkeys(['A', 'B'], '没维护')  # {'A': '没维护', 'B': '没维护'}

# 以下 测试用,实用少。了解即可
d6 = dict([('a', 1), ('b', 2)])  # {'a': 1, 'b': 2}
d7 = dict([['a', 1], ['b', 2]])  # {'a': 1, 'b': 2}
d8 = dict((['a', 1], ['b', 2], ('c', 3)))  # {'a': 1, 'b': 2, 'c': 3}
d9 = dict(zip(list("ABCDE"), list("1234")))  # {'A': '1', 'B': '2', 'C': '3', 'D': '4'}

# 获取值
print(d3[True], d3[1])  # 齐天大圣 齐天大圣
print(d3['email'])  # KeyError: 'email'。      键不在字典中时,会触发 KeyError 异常

# get()方法语法:dict.get(key[, value])  获取值
print(d3.get('name'))  # 王大锤    get方法获取键对应的值
print(d3.get('email'))  # None    若get方法获取的键不存在,返回None。    不会引发异常
print(d3.get('email', 'hi@qq.com'))  # hi@qq.com   若email键不存在,返回指定的默认值hi@qq.com,而不再返回None。  不会修改字典
print(d3.get((123,)).get('ad1'))  # 浦西   获取嵌套字典里的值。链式调用

# 获取所有键
print(d3.keys())  # dict_keys(['name', 'age', 'hobby', 123, (123,), True])
print('age' in d3.keys())  # True   存在 age 键 。等效于 'age' in d3
print('email' in d3.keys())  # False   不存在 email 键

# 获取所有值
print(d3.values())  # dict_values(['王大锤', 12, ['看书', '画画'], 990, {'ad1': '浦西', 'ad2': '浦东'}, '齐天大圣'])
print('孙悟空' in d3.values())  # False
print('齐天大圣' in d3.values())  # True

# 获取所有键值对
d5_k_v = d5.items()  # dict_items([('A', '没维护'), ('B', '没维护')])
for k, v in d5_k_v:
    print(k, v)

for k, v in d5.items():
    print(k, v)

# setdefalt 可视为新增  若键存在,不修改;若键不存在,新增并赋值
d5.setdefault('A', 999)  # {'A': '没维护', 'B': '没维护'}     键 A 已存在,不改变原值
d5.setdefault('C', 'Hi')  # {'A': '没维护', 'B': '没维护', 'C': 'Hi'}    键 C 不存在,创建并赋值 Hi

d5.update(d4)  # {'A': None, 'B': None, 'C': 'Hi'}  用 d4 字典更新 d5
d4.setdefault(120, 'Call')  # d4 ----> {'A': None, 'B': None, 120: 'Call'}
d5.update(d4)  # d5 ----> {'A': None, 'B': None, 'C': 'Hi', 120: 'Call'}  用 d4 字典更新 d5
d5_poped = d5.pop('C')  # d5 ----> {'A': None, 'B': None, 120: 'Call'}   pop方法,移除指定键值对
print(d5_poped)  # Hi
d5.pop('hello')  # 若不存在,引发异常  KeyError: 'hello'
d5_poped = d5.popitem()  # 3.6版本以前随机删除一项;3.6(字典是有序的)及以后版本删除最后一项
print(d5)  # d5  ---->  {'A': None, 'B': None}   删除最后一项,且以元组形式返回删除的键值对
print(d5_poped)  # (120, 'Call')

print(len(d3))  # 6  字典d3的长度

print('age' in d3)  # True  和下面一句等效。判断一个值是否在字典里,是默认以key去判断
print('age' in d3.keys())  # True

print(('age', 12) in d3.items())  # True
print(('age', 16) in d3.items())  # False
print(['age', 12] in d3.items())  # False

# 存在则修改,不存在则新增
d3['age'] = 20  # d3 --> {'name': '王大锤', 'age': 20, 'hobby': ['看书', '画画'], 123: 990, (123,): {'ad1': '浦西', 'ad2': '浦东'}, True: '齐天大圣'}
d3['gender'] = '男'  # d3 --> {'name': '王大锤', 'age': 20, 'hobby': ['看书', '画画'], 123: 990, (123,): {'ad1': '浦西', 'ad2': '浦东'}, True: '齐天大圣', 'gender': '男'}
del d3['gender']  # d3 --> {'name': '王大锤', 'age': 20, 'hobby': ['看书', '画画'], 123: 990, (123,): {'ad1': '浦西', 'ad2': '浦东'}, True: '齐天大圣'}
del d3['no_have']  # 若不存在,报错  KeyError: 'no_have'。 用的比pop更多,但pop有返回值

for i in d3:  # 对键循环遍历。等效于 for i in d3.keys()
    print(i)

for i in d3.values():
    print(i)

for k, v in d3.items():
    print(k, '-->', v)
print(d3)
#####################################################


#######################################################
# 集合特性:元素无序、元素可变、元素不可重复
# 定义
s = set()  # 定义空集合

# 增加元素
s.add('小王')  # {'小王'}
s.add('小张')  # {'小张', '小王'}

s.discard('小张')  # {'小王'}  删除元素:小张     discard:丢弃

s2 = {'小王', '小刘', '小孙'}
print(s & s2)  # {'小王'}  两集合取交集
s.add('小孙')
print(s & s2)  # {'小孙', '小王'}
print(s.intersection(s2))  # {'小孙', '小王'}  取交集方法2

s.add('Tom')  # s --> {'Tom', '小孙', '小王'}

print(s)  # {'Tom', '小孙', '小王'}
print(s2)  # {'小刘', '小孙', '小王'}
print(s | s2)  # {'小刘', '小孙', '小王', 'Tom'}  并集
print(s.union(s2))  # {'小刘', '小孙', '小王', 'Tom'} 并集 方法2

print(s - s2)  # {'Tom'} 差集  s中有但s2中没有的集合
print(s2.difference(s))  # {'小刘'}差集  s2中有但s中没有的集合

print(len(s))  # 3 集合s中元素个数

for i in s:  # 遍历集合
    print(i)

astr = "上海自来水来自海上"
sstr = set(astr)  # {'水', '自', '海', '上', '来'}  # 字符串转集合

alst = ' a big black bear sat on a big black bug'.strip().split()
# ['a', 'big', 'black', 'bear', 'sat', 'on', 'a', 'big', 'black', 'bug']
slst = set(alst)  # {'sat', 'big', 'a', 'black', 'bear', 'bug', 'on'}   列表转集合
print(slst)

w_lst = [11, 22, ['Mon', 'Fri'], 44]  # 列表嵌套
set(w_lst)  # 转换失败 TypeError: unhashable type: 'list'  集合元素不能是list
# 和字典一样,查询速度快(依赖于哈希存储)
# 若判断一个元素在不在一个序列里面,尽可能使用集合,因集合效率更高

s3 = {True, 1}  # True 和 False 本质上存储的是 1 和 0
print(s3)  # {True}  经过去重,只保留最先出现的 True

s4 = {1, True, False, 0}
print(s4)  # {False, 1}  只保留最先出现的值
########################################################


####################################################
# 利用 集合、列表 统计
d_str = 'asdfghgfdedacsw'
set5 = set()
lst_a = []
for i in d_str:
    if i in set5:
        lst_a.append(i)
    else:
        set5.add(i)
for i in set5:
    print("%s-->%s " % (i, lst_a.count(i) + 1), end=' ')
    # e-->1  g-->2  d-->3  s-->2  a-->2  f-->2  c-->1  h-->1  w-->1

d0: dict = dict.fromkeys(set5, 1)   # 通过集合创建字典,且赋初始值为 1
for i in d0:
    d0[i] += lst_a.count(i)
print(d0)  # {'e': 1, 'g': 2, 'd': 3, 's': 2, 'a': 2, 'f': 2, 'c': 1, 'h': 1, 'w': 1}

 

  

 

a_str.center(width)
posted @ 2023-05-26 17:32  sangern  阅读(7)  评论(0编辑  收藏  举报