您的位置:首页 > 理论基础 > 数据结构算法

python字符串和常用数据结构

2019-08-17 18:18 417 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/wjl981020/article/details/99693601

一、字符串:
(1)字符串:就是由零个或多个字符组成的有限序列
(2)常用代码:

通过len函数计算字符串的长度
str1 = 'hello, world!'
print(len(str1))
运行结果:13
获得字符串首字母大写的拷贝
print(str1.capitalize())
运行结果:Hello, world!
从字符串中查找子串所在位置
print(str1.find('or'))
运行结果:8
print(str1.find('shit'))
运行结果:-1
与find类似但找不到子串时会引发异常
print(str1.index('or'))
运行结果:8
print(str1.index('shit'))
运行结果:Traceback (most recent call last):
File "d:/python3/day04.py", line 7, in <module>
print(str1.index('shit'))
ValueError: substring not found
检查字符串是否以指定的字符串开头
print(str1.startswith('He'))
运行结果:False
检查字符串是否以指定的字符串结尾
print(str1.endswith('!'))
运行结果:True
将字符串以指定的宽度居中并在两侧填充指定的字符
print(str1.center(50, '*'))
运行结果:******************hello, world!*******************
将字符串以指定的宽度靠右放置左侧填充指定的字符
print(str1.rjust(50, ' '))
运行结果:                            hello, world!
从字符串中取出指定位置的字符(下标运算)
str2 = 'abc123456'
print(str2[2])
运行结果:c
字符串切片(从指定的开始索引到指定的结束索引)
print(str2[2:5])
print(str2[2:])
print(str2[::2])
print(str2[::-1])
print(str2[-3:-1])
运行结果:
c12
c123456
c246
ac246
654321cba
45
检查字符串是否由数字构成
print(str2.isdigit())
运行结果:False
检查字符串是否以字母构成
print(str2.isalpha())
运行结果:False
检查字符串是否以数字和字母构成
print(str2.isalnum())
运行结果:True
获得字符串修剪左右两侧空格的拷贝
str3 = '  jackfrued@126.com '
print(str3.strip())
print(str3.lstrip())
print(str3.rstrip())
运行结果:
jackfrued@126.com
jackfrued@126.com
jackfrued@126.com

python常用的数据结构:列表、元组、集合和字典
列表:[ ]、也可以进行切片操作,可以修改元素
定义列表:

list1 = [1, 3, 5, 7,100]

列表的乘法:

list2 = ['hello'] * 5
print(list2)
运行结果:['hello', 'hello', 'hello', 'hello', 'hello']

下标(索引)运算:

print(len(list2))
运行结果:5

添加元素:

list2.append(200)
print(list2)
运行结果:['hello', 'hello', 'hello', 'hello', 'hello', 200]

删除元素:

list2.remove(200)
print(list2)
运行结果:['hello', 'hello', 'hello', 'hello', 'hello']

注:
1、sorted函数返回列表排序后的拷贝不会修改传入的列表
2、通过key关键字参数指定根据字符串长度进行排序而不是默认的字母表顺序
3、sort给列表对象发出排序消息直接在列表对象上进行排序
4、 用列表的生成表达式语法创建列表容器

f = [x + y for x in 'ABCDE' if x == 'A' for y in '1234567'] 		print(f)

5、通过生成器可以获取到数据但它不占用额外的空间存储数据, 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)

f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f))  # 相比生成式生成器不占用存储数据的空间
print(f)
for val in f:
print(val)

6、Python中还有另外一种定义生成器的方式,就是通过yield关键字将一个普通函数改造成生成器函数

def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
yield a

元组:( )、元组的元素不能修改
定义元组:

t = ('wjl',22,True,'内蒙古') print(t) 运行结果:('wjl', 22, True, '内蒙古')

获取元组中的元素:
print(t[0]) 运行结果:wjl

遍历元组中的值:

for member in t:
print(member)
运行结果:
wjl
22
True
内蒙古

将元组转换成列表

person = list(t)
print(person)
运行结果:['wjl', 22, True, '内蒙古']

将列表转换成元组

fruits_list = ['apple', 'banana', 'orange']
fruits_tuple = tuple(fruits_list)
print(fruits_tuple)
运行结果:('apple', 'banana', 'orange')

注:
1、如果不需要对元素进行添加、删除、修改的时候,可以考虑使用元组,当然如果一个方法要返回多个值,使用元组也是不错的选择
2、元组在创建时间和占用的空间上面都优于列表。我们可以使用 sys 模块的 getsizeof 函数来检查存储同样的元素的元组和列表各自占用了多少内存空间

集合:{ }、不允许有重复元素,而且可以进行交集、并集、差集等运算、remove的元素如果不存在会引发KeyError、
创建集合:

set2 = set(range(1, 10))
print(set2)
运行结果:{1, 2, 3, 4, 5, 6, 7, 8, 9}

遍历元素并进行运算:

for elem in set2:
print(elem ** 2, end=' ')
print()
运行结果:
1
4
9
16
25
36
49
64
81

将元组转换成集合:

set3 = set((1, 2, 3, 3, 2, 1))
print(set3)
运行结果:{2, 3}

集合的交集、并集、差集、对称差运算

print(set1 & set2)

8000
# print(set1.intersection(set2))
print(set1 | set2)
# print(set1.union(set2))
print(set1 - set2)
# print(set1.difference(set2))
print(set1 ^ set2)
# print(set1.symmetric_difference(set2))
# 判断子集和超集
print(set2 <= set1)
# print(set2.issubset(set1))
print(set3 <= set1)
# print(set3.issubset(set1))
print(set1 >= set2)
# print(set1.issuperset(set2))
print(set1 >= set3)
# print(set1.issuperset(set3))

字典:{ }、可以存储任意类型对象,与列表、集合不同的是,字典的每个元素都是由一个键和一个值组成的“键值对”,键和值通过冒号分开。
注:
1、字典的一切操作都是通过键名操作键值!!!
2、字典是无序的,没有索引操作,除非转换成有序字典
创建字典并且通过键获取对应的值:

scores = {'小黄鸭': 88, '哆啦A梦': 66, '大白': 23}
print(scores['哆啦A梦'])
运行结果:66

对字典进行遍历(遍历的其实是键再通过键取对应的值)

for elem in scores:
print('%s\t--->\t%d' % (elem, scores[elem]))
运行结果:
小黄鸭  --->    88
哆啦A梦 --->    66
大白    --->    23

更新字典中的元素

scores['大白'] = 99
print(scores)
运行结果:{'小黄鸭': 88, '哆啦A梦': 66, '大白': 99}

get方法也是通过键获取对应的值但是可以设置默认值

print(scores.get('小黄鸭', 88))
运行结果:88

删除字典中的元素

print(scores.popitem())
运行结果:('大白', 99)
# 同时获取键值对
# for key,value in dict_.items():
#     print(key,value)
# 获取键名
print(dict_.keys())
# 获取键值
print(dict_.values())
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: