欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python—字符串和常用数据结构

程序员文章站 2022-07-02 13:18:44
[TOC] 序言:这一章我们学习字符串、列表、元组、字典 等常用存储结构 1. 字符串 所谓 字符串 ,就是由零个或多个字符组成的有限序列 ,简单来说:双引号或者单引号中的数据,就是字符串 通过下面代码,我们来了解一下字符串的使用 输出结果   str = "helloworld" | 方 ......

目录

序言:这一章我们学习字符串、列表、元组、字典 等常用存储结构

1. 字符串

所谓字符串,就是由零个或多个字符组成的有限序列 ,简单来说:双引号或者单引号中的数据,就是字符串

通过下面代码,我们来了解一下字符串的使用

# -*- coding:utf-8 -*-
def main():
    str1 = 'hello world!'
    #通过len 计算函数字符串的长度
    print(len(str1))
    #获得字符串首字母大写的拷贝
    print(str1.capitalize())
    #获得字符串全大写的拷贝
    print(str1.upper())
    #查询or 是否被包含str1中 包含返回索引值
    print(str1.find("or"))
    #查询and 是否被包含str1
    print(str1.find("and"))
    #index 与find类似 但是找不到会抛异常
    print(str1.index("or"))
    #print(str1.index("or"))
    #检查字符串是否以指定的字符串开头
    print(str1.startswith("he"))
    print(str1.startswith("1he"))
    #检查字符串是否以指定的字符串结尾
    print(str1.endswith("!"))
    #将字符串以指定的宽度居中 并在两边添加指定的字符
    print(str1.center(50,"*"))
    print(str1.rjust(50," "))
    str2 = "abc123456 ";
    # 字符串切片:从字符串中取出指定位置的字符
    print("str2[2]: ",str2[2])
    print("str2[2:]:",str2[2:])
    print("str2[::2]:",str2[::2])
    print("str2[::-1]:",str2[::-1])
    print("str2[-3::-1]:",str2[-3::-1])
    # 检查字符串是否由数字构成
    print(str2.isdigit())
    # 检查字符串是否由字母构成
    print(str2.isalpha())
    # 检查字符串是否由数字字母组成
    print(str2.isalnum())
    #去除两侧空格
    print(str2.strip())

if  __name__ == '__main__':
    main()

输出结果

Python—字符串和常用数据结构

 

str = "helloworld"

方法 说明 结果
len(str) 字符串长度 10
str.capitalize() 字符串首字母大写 helloworld
str.upper() 字符串全大写 helloworld
str.find("or") 检测 "or" 是否包含在 str 中,如果是返回开始的索引值,否则返回-1 6
str.startswith("h") 检查字符串是否以指定的字符串开头 true
str.endswith("!") 检查字符串是否以指定的字符串结尾 false
str.center(20,"*") 将字符串以指定的宽度居中 并在两边添加指定的字符 *****helloworld*****
str.isdigit() 检查字符串是否由数字构成 false
str.isalpha() 检查字符串是否由字母构成 true
str.strip() 去除两侧空格 helloworld

 

2. 列表

列表是python中内置有序、可变序列,列表的所有元素放在一对中括号“[]”中,并使用逗号分隔开

列表常用方法

方法 说明
lst.append(x) 将元素x添加至列表lst尾部
lst.extend(l) 将列表l中所有元素添加至列表lst尾部
lst.insert(index, x) 在列表lst指定位置index处添加元素x,该位置后面的所有元素后移一个位置
lst.remove(x) 在列表lst中删除首次出现的指定元素,该元素之后的所有元素前移一个位置
lst.pop([index]) 删除并返回列表lst中下标为index(默认为-1)的元素
lst.clear() 删除列表lst中所有元素,但保留列表对象
lst.index(x) 返回列表lst中第一个值为x的元素的下标,若不存在值为x的元素则抛出异常
lst.count(x) 返回指定元素x在列表lst中的出现次数
lst.reverse() 对列表lst所有元素进行逆序
lst.sort(key=none, reverse=false) 对列表lst中的元素进行排序,key用来指定排序依据,reverse决定升序(false),还是降序(true)
lst.copy() 返回列表lst的浅复制

 

2.1 列表的增删改查

def main():
    list1 = [1,3,5,7,100]
    print(list1)
    list2 = ['hello'] * 5
    print(list2)
    # 计算列表的长度
    print("列表的长度为:",len(list2))
    #下标索引
    print("索引为0的元素:",list1[0])
    print("索引为3的元素:",list1[3])
    print("索引为-1的元素:",list1[-1])
    #修改元素
    list1[2] = 300
    print("修改结果:",list1)
    #添加元素
    list1.append(121)
    print("append添加元素的结果:",list1)
    list1.insert(1,676);
    print("insert插入元素的结果:",list1)
    list1 += [700,800]
    print("+=添加元素:",list1)
    #删除元素
    list1.remove(700)  #移除某个元素
    print("remove移除元素:",list1)
    list1.pop();    #移除列表最后一位元素
    print("pop移除最后一位",list1)
    del list1[0]    #移除某个下标的元素
    print("del移除:",list1)
    list1.clear() #清空列表
    print("清空后的列表:",list1)


if __name__ == "__main__":
    main()

输出结果

Python—字符串和常用数据结构

 

2.2 列表的切片和排序

1、列表的切片操作

"""
列表的切片操作
version:0.1
author:coke
"""
def main():
    names = ["a","b","c","d"]
    names += ["e","f","g"]
    # 循环遍历列表元素
    for name in names:
        print(name,end = " ")
    print()
    # 列表切片
    names2 = names[1:4]
    print("names2:",names2)
    # 可以完整切片操作来复制列表
    names3 = names[:]
    print("names3:",names3)
    # 可以通过反向切片操作来获得倒转后的列表的拷贝
    names4 = names[::-1]
    print("names4:",names4)

if __name__ == "__main__":
    main()

输出结果

Python—字符串和常用数据结构

 

2、列表的排序操作

"""
列表的排序操作
version:0.1
author:coke
"""
def main():
    list1 = ["a","be","c","d","e"]
    list2 = sorted(list1)
    print("list2:",list2)
    # sorted函数返回列表排序后的拷贝不会修改传入的列表
    list3 = sorted(list1,reverse=true)
    print("list3:",list3)
    # 通过key关键字参数指定根据字符串长度进行排序 而不是默认的字母表顺序
    list4 = sorted(list1,key=len)
    print("list4:",list4)

if __name__ == "__main__":
    main()

输出结果

Python—字符串和常用数据结构

 

2.3 生成式语法

我们还可以使用列表的生成式语法来创建列表

"""
生成试语法创建列表
version:0.1
author:coke
"""
import sys
def main():
    f = [x for x in range(1,10)]
    print("f:",f)
    f = [ x + y for x in "abcde" for y in "1234567"]
    print("f:",f)
    #通过列表的生成表达式语法创建列表容器
    #用这种语法创建列表之后 元素已经准备就绪所有需要耗费较多的内存空间
    f = [x ** 2 for x in range(1,1000)]
    print("生成试语法:",sys.getsizeof(f)) #9024
    #print(f)
    #请注意下面的代码创建的不是一个列表 而是一个生成器对象
    #每次生成器对象可以获取到数据 但它不占用额外的空间存储数据
    #每次需要数据的时候就通过内部运算得到数据
    f = (x ** 2 for x in range(1,1000))
    print("生成器对象:",sys.getsizeof(f))
    print(f)
    """
        for val in f:
        print(val)
    print(sys.getsizeof(f))
    """
if __name__ == "__main__":
    main()

输出结果

Python—字符串和常用数据结构

 

除了上面提到的生成器语法,python中还有另外一种定义生成器的方式,就是通过yield关键字将一个普通函数改造成生成器函数。下面的代码演示了如何实现一个生成斐波拉切数列的生成器。所谓斐波拉切数列可以通过下面递归的方法来进行定义:

"""
定义生成器
version:0.1
author:coke
"""
def fib(n):
   a,b = 0,1
   for _ in range(n):
       a,b = b, a+b
       yield a
def main():
   for val in fib(20):
       print(val)

if __name__ == '__main__':
   main()

 

3. 元组

python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。

def main():
   # 定义元组
   t = ('骆昊', 38, true, '四川成都')
   print(t)
   # 获取元组中的元素
   print(t[0])
   print(t[3])
   # 遍历元组中的值
   for member in t:
       print(member)
   # 重新给元组赋值
   # t[0] = '王大锤'  # typeerror
   # 变量t重新引用了新的元组原来的元组将被垃圾回收
   t = ('王大锤', 20, true, '云南昆明')
   print(t)
   # 将元组转换成列表
   person = list(t)
   print(person)
   # 列表是可以修改它的元素的
   person[0] = '李小龙'
   person[1] = 25
   print(person)
   # 将列表转换成元组
   fruits_list = ['apple', 'banana', 'orange']
   fruits_tuple = tuple(fruits_list)
   print(fruits_tuple)


if __name__ == '__main__':
   main()

这里有一个非常值得探讨的问题,我们已经有了列表这种数据结构,为什么还需要元组这样的类型呢?

  1. 元组中的元素是无法修改的,事实上我们在项目中尤其是多线程环境(后面会讲到)中可能更喜欢使用的是那些不变对象(一方面因为对象状态不能修改,所以可以避免由此引起的不必要的程序错误,简单的说就是一个不变的对象要比可变的对象更加容易维护;另一方面因为没有任何一个线程能够修改不变对象的内部状态,一个不变对象自动就是线程安全的,这样就可以省掉处理同步化的开销。一个不变对象可以方便的被共享访问)。所以结论就是:如果不需要对元素进行添加、删除、修改的时候,可以考虑使用元组,当然如果一个方法要返回多个值,使用元组也是不错的选择。
  2. 元组在创建时间和占用的空间上面都优于列表。

 

4.集合

python中的集合跟数学上的集合是一致的,不允许有重复元素,而且可以进行交集、并集、差集等运算。

Python—字符串和常用数据结构

"""
使用集合
version:0.1
author:coke
"""
def  main():
    set1 = {1,2,3,3,2,4}
    print(set1)
    # len() 求集合的长度
    print('length=',len(set1))
    set2 = set(range(1,10))
    print(set2)
    set1.add(7)
    set1.add(8)
    set2.update([11,12])
    print("set1:",set1)
    print("set2:",set2)
    # 移除元素5
    set2.discard(5)
    # remove的元素 如果不存在会引发keyerror
    if 4 in set2:
        set2.remove(4)
    #遍历集合容器
    for ele in set2:
        print(ele,end=" ")
    print(" ")
    #将元组转换成集合
    set3 = set((1,2,3,4,5))
    print(set3.pop())
    print("set3:",set3)
    # 集合的交集、并集、差集、对称差运算
    print("交集:",set1 & set2)
    print("并集:",set1 | set2)
    print("差集:",set1 - set2)
    print("对称差运算:",set1 ^ set2)
    #判断子集和超集
    print("子集:",set1 <= set2)
    #print(set1.issuperset(set2))
    print("超集:",set1 >= set2)
    #print(set1.issubset(set2))

if __name__ == "__main__":
    main()

输出结果

Python—字符串和常用数据结构

 

5. 字典

字典和列表一样,也能够存储多个数据。字典的每个元素由2部分组成,键:值。例如 'name':'班长' ,'name'为键,'班长'为值

5.1 字典的增删改查

1、添加元素

info = {'name':'班长', 'sex':'f', 'address':'地球亚洲中国北京'}
# print('id为:%d'%info['id'])#程序会终端运行,因为访问了不存在的键
newid = input('请输入新的学号:')
info['id'] = newid
print('添加之后的id为:',info['id'])

 

2、修改元素

info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国北京'}
newid = input('请输入新的学号:')
info['id'] = int(newid)
print('修改之后的id为:',info['id'])

 

3、删除元素

  • del 删除指定元素
  • clear() 清空整个字典
info = {'name':'班长', 'sex':'f', 'address':'地球亚洲中国北京'}
print("删除前:",info)
del info['name']
print('删除后:',info)
info.clear()
print("清空后:",info)

 

4、查找某个元素

字典在查询某个元素时,若该字典没有所查询的元素会报错,所以查询前最好进行判断

info = {'id':1,'name':'班长', 'sex':'f', 'address':'地球亚洲中国北京'}
print("查询:",info)
print("查询存在的元素:",info['id'])
#print("查询不存在的元素:",info['age'])  keyerror
print("查询不存在的元素:",info['age'] if 'age' in info else "元素不存在")

 

5.2 字典的常见操作

1、len():测量字典键值对的个数

dict = {"name":"jack","age":11}
print(len(dict))

 

2、 keys():返回一个包含字典所有key的列表

dict = {"name":"jack","age":11}
print(dict.keys())

 

3、values():返回一个包含字典所有value的列表

dict = {"name":"jack","age":11}
print(dict.values())

 

4、items():返回一个包含所有(键,值)元组的列表

dict = {"name":"jack","age":11}
print(dict.items)

 

5、字典遍历

"""
字典测试
version:0.1
author:coke
"""
info = {"name":"coke","age":11,"height":"198"}

print("遍历字典项--------------------第一种方式")
for item in info.items():
    print(item)
print("遍历字典项--------------------第二种方式")
for key,value in info.items():
    print("%s:%s"%(key,value))