7天学会python_Python学习:第七天

字符串和数据结构

计算机发展至今,已经不再是纯粹的运算了,再多的是数据的存储,数据当然有很多种,数字,图片,文件,视频等等,而Python也必须能够操作这样的信息,不然也就没有什么意义了,今天,我们就了解下字符串和它的一些内容。

(((((((桌子太小就换了个小键盘,感觉有点不熟悉)))))))

字符串,其中就是多个字符所组成的。在Python中,我们用单引号或双引号来表示一个字符串。比如:

"""关于字符串Version: 0.1Author: 大饼油条"""s1 = '大家好,'s2 = "我是"# 还可以以下这样哦s3 = """大饼,油条!"""print(s1, s2, s3, end='')

还有一些特别的操作:

\(反斜杠)来表示转义,也就是说\后面的字符不再是它原来的意义。比如

\n:代表反斜杠和字符n,而是表示换行

\t:也不是代表反斜杠和字符t,而是表示制表符

所以如果想在字符串中表示:',要写成:\',同理想表示:\,就要写成:\\

s1 = '\'你好!\''s2 = '\n\\大家好!\\\n'print(s1, s2, end='')#这个代码大家自己去运行吧。

\的后面还可以用进制或Unicode字符编码(ASCII)来表示字符,比如:

s1 = '\141\142\143\x61\x62\x63'#\141是八进制表示法,\x61是十六进制表示法s2 = '\u5927\u5c4f\u6cb9\u6761'print(s1, s2)

当然,在有些时候,我们并不希望在输出过程中把\后的的字符给转义掉,这时候,我们可以用r来说明,比如:

"""关于字符串Version: 0.1Author: 大饼油条"""s1 = r'\'你好!\''s2 = r'\n\\大家好!\\\n'print(s1, s2, end='')

在Python中,字符串的运算比数字运算有趣的多,下面,我整理了一下字符串运算的运算符,一起来了解下:

+:实现字符串的拼接

*:重复字符串内容

in 或not in:判断字符串中是否包含条件中的字符串内容

[]或[:]:取出某些特定的字符内容

看下例子

"""关于字符串运算Version: 0.1Author: 大饼油条"""s1 = '你好! ' * 3print(s1) # 输出三个你好!s2 = '大饼油条's1 += s2print(s1) # 你好!你好!你好!大饼油条print('你' in s1) # True,判断“你”,是否在s1字符串中,下同print('我' in s1) # Falsestr2 = 'abc123456'# 从字符串中取出指定位置的字符(下标运算)print(str2[2]) # c 取第二个字符(从0开始)print(str2[2:5]) # c12 取第二个开始的,第五个结束,注意取的范围print(str2[2:]) # c123456 取第二个开始的到最后print(str2[2::2]) # c246 取第二个开始的偶数个print(str2[::2]) # ac246 取第二个开始的偶数个print(str2[::-1]) # 654321cba 取反print(str2[-3:-1]) # 45 取-3开始到-1个

我们还可以用很多的方法来对字符串操作:比如

"""关于字符串运算Version: 0.1Author: 大饼油条"""str1 = 'hello, world!'# 通过内置函数len计算字符串的长度print(len(str1)) # 13# 获得字符串首字母大写的拷贝print(str1.capitalize()) # Hello, world!# 获得字符串每个单词首字母大写的拷贝print(str1.title()) # Hello, World!# 获得字符串变大写后的拷贝print(str1.upper()) # HELLO, WORLD!# 从字符串中查找子串所在位置print(str1.find('or')) # 8print(str1.find('shit')) # -1# 与find类似但找不到子串时会引发异常# print(str1.index('or'))# print(str1.index('shit'))# 检查字符串是否以指定的字符串开头print(str1.startswith('He')) # Falseprint(str1.startswith('hel')) # True# 检查字符串是否以指定的字符串结尾print(str1.endswith('!')) # True# 将字符串以指定的宽度居中并在两侧填充指定的字符print(str1.center(50, '*'))# 将字符串以指定的宽度靠右放置左侧填充指定的字符print(str1.rjust(50, ' '))str2 = 'abc123456'# 检查字符串是否由数字构成print(str2.isdigit()) # False# 检查字符串是否以字母构成print(str2.isalpha()) # False# 检查字符串是否以数字和字母构成print(str2.isalnum()) # Truestr3 = ' 5416268@qq.com 'print(str3)# 获得字符串修剪左右两侧空格之后的拷贝print(str3.strip())

在没学过字符串运算时,我们可以用下面这样的方法来输出字符串:

a, b = 5, 10print('%d * %d = %d' % (a, b, a * b))

了解了字符串运算,我们就可以写成:

a, b = 5, 10print('{0} * {1} = {2}'.format(a, b, a * b))

Python 3.6之后的版本中,就更更更更方法了,只要在字符串前加上字母f,就可以随便输出了,小学生都会了。

a, b = 5, 10print(f'{a} * {b} = {a * b}')

列表的使用

关于列表,如果你接触过别的语言,肯定不会陌生,我们知道字符串是有属性和方法的,而列表(list)同样也是,列表中的每一个值都是可以被标识的,定义列表可以把元素放在[]中,多个元素可以用,进行分割。使用for循环对列表内的元素进行查看,当然,也可以用我们刚刚学的字符串运算中的[]或[:]进行取值。来些例子,可能你就能明白了。

"""关于字符串运算Version: 0.1Author: 大饼油条"""list1 = [1, 3, 5, 7, 100]print(list1) # [1, 3, 5, 7, 100]# 乘号表示列表元素的重复list2 = ['hello'] * 3print(list2) # ['hello', 'hello', 'hello']# 计算列表长度(元素个数)print(len(list1)) # 5# 下标(索引)运算print(list1[0]) # 1print(list1[4]) # 100print(list1[-1]) # 100print(list1[-3]) # 5list1[2] = 300print(list1) # [1, 3, 300, 7, 100]# 通过循环用下标遍历列表元素for index in range(len(list1)):print(list1[index])# 通过for循环遍历列表元素for elem in list1:print(elem)# 通过enumerate函数处理列表之后再遍历可以同时获得元素索引和值for index, elem in enumerate(list1):print(index, elem)

以上,只是查看列表中的内容,这样远远不够,我们还要添加、删除里面的内容。例如:

"""关于列表运算Version: 0.1Author: 大饼油条"""list1 = [1, 3, 5, 7, 100]# 添加元素list1.append(200)# 在最后加个值为200的元素list1.insert(1, 400)#在第1个元素后面加个值为400的元素# 合并两个列表# list1.extend([1000, 2000])list1 += [1000, 2000]print(list1) # [1, 400, 3, 5, 7, 100, 200, 1000, 2000]print(len(list1)) # 9# 先通过成员运算判断元素是否在列表中,如果存在就删除该元素if 3 in list1:list1.remove(3)if 1234 in list1:list1.remove(1234)print(list1) # [1, 400, 5, 7, 100, 200, 1000, 2000]# 从指定的位置删除元素list1.pop(0)list1.pop(len(list1) - 1)print(list1) # [400, 5, 7, 100, 200, 1000]# 清空列表元素list1.clear()print(list1) # []

再来几个有用的例子。我就不放代码了,自己可以去练习下,下面是我的运算结果。

1、取出一部分的元素,来做新的列表内容。

2、列表的排序

用一些方法来创建列表

我们可以用一些特别的方法来生成列表,在术语中好像有对这种方法的描述,但我想了十分钟,确实想不出叫什么来着。

比如用循环:

"""关于列表运算Version: 0.1Author: 大饼油条"""f = [x for x in range(1, 10)]print(f)f = [x + y for x in 'ABCDE' for y in '1234567']print(f)f = [x ** 2 for x in range(1, 1000)]print(sys.getsizeof(f)) # 查看对象占用内存的字节数print(f)f = (x ** 2 for x in range(1, 1000))print(sys.getsizeof(f))print(f)for val in f:print(val)

除了上面的方法,我们还可以用yield关键字,把普通函数作为创建列表的函数,当然,我从来没有这么做过。你或许有用。

"""关于列表运算Version: 0.1Author: 大饼油条"""def fib(n):a, b = 0, 1for _ in range(n):a, b = b, a + byield adef main():for val in fib(20):print(val)if __name__ == '__main__':main()

不知道为什么,我并不喜欢这样的方法。个人喜欢吧。

元组的使用

元组其实和列表差不多,只不过列表的元素是可以有多个可变的,而元组是固定不能变的。其实的都一样,包括可以存放多条数据。而元组的定义和使用也是很方便的。

"""关于列表运算Version: 0.1Author: 大饼油条"""# 定义元组t = ('大饼', 34, True, '浙江绍兴')print(t)# 获取元组中的元素print(t[0])print(t[3])# 遍历元组中的值for member in t:print(member)# 重新给元组赋值# t[0] = '油条' # TypeError# 变量t重新引用了新的元组原来的元组将被垃圾回收t = ('油条', 31, True, '浙江绍兴')print(t)# 将元组转换成列表person = list(t)print(person)# 列表是可以修改它的元素的person[0] = '小美女'person[1] = 25print(person)# 将列表转换成元组fruits_list = ['apple', 'banana', 'orange']fruits_tuple = tuple(fruits_list)print(fruits_tuple)

有小伙伴肯定会想了,有了列表,为什么要用元组呢?

这里我不想展开,元组和列表的区别在百度上有很多说明,我只想偷偷告诉你,其实我还是比较喜欢用元组。不是因为他创建的时候或占用的空间优势,而是更喜欢他的元素不变的限制。

集合的使用

数学中有集合的运算,Python肯定也不会放过。当然同样不允许有重复元素,可以交集、并集和差集等。

1、创建和使用集合。

# 创建集合的字面量语法set1 = {1, 2, 3, 3, 3, 2}print(set1)print('Length =', len(set1))# 创建集合的构造器语法(面向对象部分会进行详细讲解)set2 = set(range(1, 10))set3 = set((1, 2, 3, 3, 2, 1))print(set2, set3)# 创建集合的推导式语法(推导式也可以用于推导集合)set4 = {num for num in range(1, 100) if num % 3 == 0 or num % 5 == 0}print(set4)

2、在集合中添加元素和删除元素。

set1.add(4)set1.add(5)set2.update([11, 12])set2.discard(5)if 4 in set2:set2.remove(4)print(set1, set2)print(set3.pop())print(set3)

3、交集、并集、差集等运算。

# 集合的交集、并集、差集、对称差运算print(set1 & set2)# 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))

字典的使用

字典的意思就是被敲定了的,写在一个地方了,每一个无素有键和值组成,用:分开。

"""关于列表运算Version: 0.1Author: 大饼油条"""# 创建字典的字面量语法scores = {'大饼': 95, '油条': 78, '小美女': 82}print(scores)# 创建字典的构造器语法items1 = dict(one=1, two=2, three=3, four=4)# 通过zip函数将两个序列压成字典items2 = dict(zip(['a', 'b', 'c'], '123'))# 创建字典的推导式语法items3 = {num: num ** 2 for num in range(1, 10)}print(items1, items2, items3)# 通过键可以获取字典中对应的值print(scores['大饼'])print(scores['小美女'])# 对字典中所有键值对进行遍历for key in scores:print(f'{key}: {scores[key]}')# 更新字典中的元素scores['油条'] = 65scores['小吊丝'] = 71scores.update(老太太=67, 老爷爷=85)print(scores)if '小帅哥' in scores:print(scores['小帅哥'])print(scores.get('小帅哥'))# get方法也是通过键获取对应的值但是可以设置默认值print(scores.get('小帅哥', 60))# 删除字典中的元素print(scores.popitem())print(scores.popitem())print(scores.pop('大饼', 100))# 清空字典scores.clear()print(scores)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值