python高级特性(代码片段)

礁之 礁之     2023-01-19     594

关键词:

文章目录


此文章参考廖雪峰大神的官网,地址:高级特性 - 廖雪峰的官方网站 (liaoxuefeng.com)

一、切片

  • 在python的使用中,对于列表、元组的元素取值是非常常见的,例如:
  • 注意:切片是顾头不顾尾的
>>> L = ["aaa","bbb","ccc","ddd"] 
>>> print(L) 
['aaa', 'bbb', 'ccc', 'ddd']

#如果想取前三个元素,可以这样:
>>> print(L[0],L[1],L[2])   
aaa bbb ccc

#也可以使用for循环:
>>> for i in range(3):
...     a.append(L[i])
... 
>>> print(a) 
['aaa', 'bbb', 'ccc']

#但是明显前两种方法都比较繁琐,所以,python提供了切片(Slice)操作符,这样在取指定元素时可以变得更加简单,例如:
>>> print(L[0:3])   #表示从第0个元素取到第3个元素,由于切片是顾头不顾尾的,所以是不包含第3个元素的,只取出了前三个元素
['aaa', 'bbb', 'ccc']
>>> print(L[:3])    #默认:前面从0开始
['aaa', 'bbb', 'ccc']

#有了切片这个方法后,就可以轻松取出一段元素,例如:
>>> L = list(range(100))   #python3需要把range转换成列表,python2可以直接使用range赋值,range(100)表示0-99,同样顾头不顾尾
>>> print(L) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> print(L[:])     #切片没有指定条件的话,会输出全部
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> print(L[:10])   #取前10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(L[10:20])  #取10-19
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> print(L[:-1])   #使用负数时,是从末尾开始算的,":-1"表示从0到末尾-1,所以是0-98
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98]
>>> print(L[-10:-1])  #取倒数10到倒数1
[90, 91, 92, 93, 94, 95, 96, 97, 98]
>>> print(L[-20:-10]) 
[80, 81, 82, 83, 84, 85, 86, 87, 88, 89]
>>> print(L[-10:])    
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

#如果想每个5个取一个值的话,可以这样做:
>>> print(L[::5])    #表示每隔5个值取一个元素
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
  • 上面的是列表的取值案例,列表的切片最终输出的结果还是列表
  • python的切片还可以引用在其他数据类型上,如元组、字符串等,例如:
#元组
>>> T = (1,2,3,4,5)  
>>> print(T) 
(1, 2, 3, 4, 5)
>>> print(T[1:3]) 
(2, 3)
>>> print(T[-3:]) 
(3, 4, 5)

#字符串
>>> S = "ABCDEFG" 
>>> print(S) 
ABCDEFG
>>> print(S[4:]) 
EFG
>>> print(S[::3]) 
ADG
  • 在自己实践过之后可以发现,元组切片后的输出还是元组,同样字符串切片后还是字符串

  • 这里引用一个小案例,不使用strip函数,利用切片来去除首位的空格:

# -*- coding: utf-8 -*-
def trim(s):
    if s[:1] != ' ' and s[-1:] != ' ':
        return s
    elif s[:1] == ' ':
        return trim(s[1:])
    else:
        return trim(s[:-1])

if trim('hello  ') != 'hello':
    print('测试失败!')
elif trim('  hello') != 'hello':
    print('测试失败!')
elif trim('  hello  ') != 'hello':
    print('测试失败!')
elif trim('  hello  world  ') != 'hello  world':
    print('测试失败!')
elif trim('') != '':
    print('测试失败!')
elif trim('    ') != '':
    print('测试失败!')
else:
    print('测试成功!')

这段代码通过切片去判断首位是否有空格,有的话会再次调用函数,并且引用第1元素或第-1元素来去除空格,然后继续做判断,直至首尾没有空格

二、迭代

  • 首先要知道的是,通过for循环来遍历列表、元组、字符串等,这种遍历就称为迭代
  • 需要注意的是,python中的迭代是直接通过for in的这种方式来完成的,而其他语言,比如C语言中的迭代是通过下标完成的,即i++这种方式。并且python的for循环还可以使用在其他的可迭代的数据类型上
  • 除了列表、元组这种有下标的数据类型,python中的for循环还可以使用在其他没有下标的可迭代数据类型上,如字典:
>>> L = "aaa":1,"bbb":2,"ccc":3 
'aaa': 1, 'bbb': 2, 'ccc': 3
>>> for i in L:
...     print(i) 
... 
aaa
bbb
ccc

#但是直接这样循环的话,可以看到,只能取到字典的key,取不到value,取value的话可以这样:
>>> for i in L.values():   #利用values函数来取到value的值
...     print(i)
... 
1
2
3

#想要同时取key和value的话可以使用items函数:
>>> for x,y in L.items():
...     print(x,y) 
... 
aaa 1
bbb 2
ccc 3

要注意的是,因为字典的存储不是按照列表的方式顺序排列的,所以迭代出的结果有可能会不同

  • 其他类型的一些循环:
#字符串
>>> S = "ABCDEFG" 
>>> print(S)      
ABCDEFG
>>> for i in S:
...     print(i) 
... 
A
B
C
D
E
F
G

#元组
>>> T = (1,2,3,4) 
>>> for i in T:
...     print(i) 
... 
1
2
3
4

#列表
>>> L = [1,2,3,4] 
>>> for i in L: 
...     print(i) 
... 
1
2
3
4
  • 在上面的案例中,可以看出,for循环只要是使用于可迭代的数据类型,都可以正常运行,那怎么看是否是可迭代的数据类型呢,python提供了相应的方法:
>>> from collections.abc import Iterable    #导入collections.abc模块的Iterable方法
>>> isinstance('aaaa',Iterable) 
True  #True表示为可迭代的数据类型
>>> isinstance([1,2,3],Iterable) 
True
>>> isinstance((1,2,3),Iterable) 
True
>>> isinstance(S,Iterable)       
True
>>> isinstance(L,Iterable) 
True
>>> isinstance(T,Iterable) 
True
>>> isinstance("aaa":1,"bbb":2,Iterable) 
True
  • 引用其他的一些小案例:
>>> L = [1,2,3,4,5]   
>>> for x,y in enumerate(L):  #使用enumerate函数可以输出“下标 + 元素”的格式
...     print(x,y) 
... 
0 1
1 2
2 3
3 4
4 5

#利用for循环来达到这种效果
>>> L = [(1,2),(3,4),(5,6)]  
>>> for x,y in L:
...     print(x,y) 
... 
1 2
3 4
5 6

#取列表中的最大值和最小值:
# -*- coding: utf-8 -*-
def findMinAndMax(L):
    if L == []:

python的高级特性(代码片段)

...xff1a;高级特性-廖雪峰的官方网站(liaoxuefeng.com)一、切片在python的使用中,对于列表、元组的元素取值是非常常见的,例如:注意:切片是顾头不顾尾的>> 查看详情

python学习07:高级特性(代码片段)

本文学习Python的笔记,仅供参考本文介绍一下Python的高级特性:切片,迭代,列表生成器,生成器切片对于List和tuple数据结构,会经常取其中的部分进行操作,如L=[1,2,3,4,5,... 查看详情

python入门-03高级特性(代码片段)

正文在下面,先打个广告:切片类似于java里的split废话不多说,上代码a=list(range(20))print(a)print(a[0:10])print(a[2:10])print(a[:10])#前面是0可以省略print(a[:])#完整复制一份print(a[-10:-3])#允许倒着数,不过倒着数最后一个... 查看详情

python之深入解析box为字典添加高级点符号访问特性(代码片段)

一、前言正常情况下,想访问字典中的某个值,都是通过中括号访问,比如:test_dict="test":"imdbstars":6.7,"length":104print(test_dict["test"]["imdbstars"])#104而通过B 查看详情

python学习07:高级特性(代码片段)

本文学习Python的笔记,仅供参考本文介绍一下Python的高级特性:切片,迭代,列表生成器,生成器切片对于List和tuple数据结构,会经常取其中的部分进行操作,如L=[1,2,3,4,5,... 查看详情

python教程:高级特性(代码片段)

...个元素出来:>>>L[1:3][\'Sarah\',\'Tracy\']类似的,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,>>>L[-2:][\'Bob\',\'Jack\']>>>L[-2:-1][\'Bob\']记住倒数第一个元素的索引是-1。切片操作十分有用。我们先... 查看详情

python3高级特性

本文为学习笔记,参考资料《廖雪峰-Python3教程》目录切片迭代列表生成式生成器迭代器掌握了​​Python​​的数据类型、语句和函数,基本上就可以编写出很多有用的程序了。但是我们还需要掌握Python的一些高级特性,精简代... 查看详情

23.flink-高级特性-新特性-streamingfliesink介绍代码演示flink-高级特性-新特性-flinksql整合hive添加依赖和jar包和配置(代码片段)

23.Flink-高级特性-新特性-StreamingFlieSink23.1.介绍23.2.代码演示24.Flink-高级特性-新特性-FlinkSQL整合Hive24.1.介绍24.2.版本24.3.添加依赖和jar包和配置24.4.FlinkSQL整合Hive-CLI命令行整合24.5.FlinkSQL整合Hive-代码整合23.Flink-高级特性-新特性-Stream... 查看详情

python相关高级特性的总结(代码片段)

...,我们可以通过for循环来遍历它,这种遍历称为迭代,在Python中通过for....in来完成的。>>>d='a':1,'b':2,'c':3>>>forkeyind:...print(key)...acb如果想迭代取值,可以用forvalueind.values()如果下标和值都取的话,可... 查看详情

#22.flink-高级特性-新特性-异步io原理(代码片段)

22.Flink-高级特性-新特性-异步IO-了解22.1.原理22.1.1.异步IO操作的需求https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/stream/operators/asyncio.htmlAsyncI/O是阿里巴巴贡献给社区的一个呼声非常高的特性,于1.12版本引入。主要目的是为... 查看详情

高级oop特性(代码片段)

PHP不支持的高级OPP特性 PHP不支持通过函数重载实现多态PHP不支持多重继承PHP不支持根据所修改数据类型为操作符赋予新的含义对象克隆克隆实例 在对象前面添加clone关键字来克隆对象,对象的属性值都被继承,克隆的对... 查看详情

python--demo13--高级特性匿名函数推导式迭代器生成器(代码片段)

学完函数,我们还需要知道一些让我们能够提高效率的高级特性:使用lambda关键字来创建匿名函数:lambda表达式只是一个表达式,而不是是一个代码块,函数体比def简单很多;lambda表达式仅仅能够封装一些简单的逻辑;lambda表达... 查看详情

20.flink高级特性--新特性--双流joinjoin的分类api代码演示-windowjoin代码演示-intervaljoin(代码片段)

20.Flink高级特性–新特性–双流Join20.1.join的分类20.2.API20.3.代码演示-WindowJoin20.4.代码演示-IntervalJoin20.Flink高级特性–新特性–双流Join20.1.join的分类双流Join是Flink面试的高频问题。一般情况下说明以下几点就可以hold了:Join大... 查看详情

23.flink-高级特性-新特性-streamingfliesink介绍代码演示flink-高级特性-新特性-flinksql整合hive添加依赖和jar包和配置(代码片段)

23.Flink-高级特性-新特性-StreamingFlieSink23.1.介绍23.2.代码演示24.Flink-高级特性-新特性-FlinkSQL整合Hive24.1.介绍24.2.版本24.3.添加依赖和jar包和配置24.4.FlinkSQL整合Hive-CLI命令行整合24.5.FlinkSQL整合Hive-代码整合23.Flink-高级特性-新特性-Stream... 查看详情

23.flink-高级特性-新特性-streamingfliesink介绍代码演示flink-高级特性-新特性-flinksql整合hive添加依赖和jar包和配置(代码片段)

23.Flink-高级特性-新特性-StreamingFlieSink23.1.介绍23.2.代码演示24.Flink-高级特性-新特性-FlinkSQL整合Hive24.1.介绍24.2.版本24.3.添加依赖和jar包和配置24.4.FlinkSQL整合Hive-CLI命令行整合24.5.FlinkSQL整合Hive-代码整合23.Flink-高级特性-新特性-Stream... 查看详情

python高级语法-类访问控制(代码片段)

简介Python是支持面向对象的编程语言,因此它也支持类似纯面向对象语言一样的类访问控制,但是Python没有显式定义诸如private、protecte、public这样的关键字,在Python中,我们主要通过遵循一定的变量、属性和方法... 查看详情

rabbitmq--高级特性(代码片段)

在上一篇文章讲解MQ消息可靠性投递和幂等性中有提到confirm机制的重要性,现在更相信的说明一下一、Confirm机制  Confirm就是消息确认,当Producer发送消息,如果Broker收到消息,会回复一个应答,我们可以以此来确认消息是否... 查看详情

021css高级特性(代码片段)

一:元素的显示与影藏1.比较常见的单词  dispaly,visibility,overflow  2.display案例  如果影藏了,这个元素就看不见了,然后也不保留位置1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>Document</... 查看详情