一、 列表推导式
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,
它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,
或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,
则会引发一个 TypeError 的异常。
列表推导式
x = ['1', '23', '34' ,'54']
list_x = [int(i) for i in x]
------------------------------------------------------------------------
2.1 列表推导
基础知识回顾,列表切片
list1 = list(range(10)) ==> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list[0:3] = [0, 1, 2] 左边是闭合区间,右边是开
list[:4] 没有指定头发,那么默认从零开始, [0, 1, 2, 3】
list[1:] 没有指定结尾,那么默认到末尾 【1, 2, 3, 4, 5, 6, 7, 8, 9】
list[-3:] 只输出倒数三位 【 7, 8, 9]
list[:-3] 只输出前两位
复制切片 p = list1[:]
一个引子:序列中被2整除的数
# a example, 每次循环都要确定,哪部分被修改,且必须通过计数器来跟踪必须处理的元素
nums = range(10)
size = len(nums)
evens = []
i = 0
while i < size:
if i % 2 ==0:
evens.appned(i)
i += 1
evens
# 用列表推导式,十分高效简洁,且可以减少bug
[i for i in range(10) if i % 2 == 0]
# example 2, 使用enumerate, 这个内建函数为在循环中使用序列时
# 提供了更加便利的获得索引的方式
# 将列表中的元素,和它的索引一起打出来
方法1)
i = 0
seq = ['one', 'two', 'three']
for element in seq:
seq[i] = '%d: %s' % (i, seq[i])
i += 1
seq
方法2)
使用 enumerate(iterable, start=0)
enumerate()函数返回一个枚举对象,iterable必须是一个序列、一个迭代器或者其他支持迭代的对象(字符串,数组,列表等)
for index, element in enumerate(seq):
print((index, element))
也可以用用列表推导式
方法3)
# %s, %d, %f 都是一个输出格式,
# 比方这个
print ("Name:%10s Age:%8d Height:%8.2f"%("Alfred",25,1.70))
#输出效果:
Name: Alfred Age: 25 Height: 1.70
——————————————————————————————————————————————————————————————————-
def _treatment(pos, ele):
return "%d: %s" % (pos, ele)
[_treatment(pos, ele) for pos, ele in enumerate(seq)]
——————————————————————————————————————————————————————————————————-
2.2
--------------------------------------------------------------------
匿名函数 lambda
python 使用 lambda 来创建匿名函数。
lambda只是一个表达式,函数体比def简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
lambda [arg1 [,arg2,.....argn]]:expression
--------------------------------------------------------------------------------------
filter
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,
如果要转换为列表,可以使用 list() 来转换。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,
然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
filter(function, iterable)
function -- 判断函数。
iterable -- 可迭代对象。
--------------------------------------------------------------------------------------
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
map(function, iterable, ...)
function -- 函数
iterable -- 一个或多个序列
--------------------------------------------------------------------------------------
二、生成式
生成器表达式的语法跟列表推导差不多,只不过把方括号换成圆括号而已。
如果生成器表达式是一个函数调用过程中的唯一参数,那么不需要额外再用括号把它围
起来。
str_1 = "QEjwqer"
tuple(ord(x) for x in str_1)
array 的构造方法需要两个参数,因此括号是必需的。 array
构造方法的第一个参数指
定了数组中数字的存储方式。
import array
array.array('I', (ord(i) for i in str1))
>> array('I', [81, 69, 106, 119, 113, 101, 114])
元组和记录
tuple1 = [("dai", "25", ), ("name", "daihao"), ("monney", "1$")]
for x in tuple1:
print('%s/%s' % x) #(%s/%s)输出第一个元素和第二个元素
for _, x in tuple1: # x表示的是元组的第二个元素
print(x)
元组还可以用来快捷赋值
city, year, pop, chg, area = ('Tokyo', 2003, 32450, 0.66, 8014)
等于 city, year, pop, chg, area = 'Tokyo', 2003, 32450, 0.66, 8014
还可以用 * 运算符把一个可迭代对象拆开作为函数的参数:
>>> divmod(20, 8) # divmod= (//, %)--->(a//b, a%b)
(2, 4)
还可以用 * 运算符把一个可迭代对象拆开作为函数的参数
>>> t = (20, 8)
>>> divmod(*t)
(2, 4)
>>> x1, x2 = divmod(*t)
>>> x1
2
>>> x2
4
import os
_, filename = os.path.split('/home/luciano/.ssh/idrsa.pub') # os.path.split() 将文件名和路径名分开
print(filename) --- idrsa.pub
用 * 来处理剩下的元素
>>> x
[1, (12, 33), {'w': 'wq'}]
>>> a, *b, c =x
>>> c
{'w': 'wq'}
>>>
format 实现定长(或者说是宽)输出
当对一组数据输出的时候,我们有时需要输出以指定宽度,来使数据更清晰。这时我们可以用format来进行约束。
mat = "{:20}\t{:28}\t{:32}"
print(mat.format("占4个长度","占8个长度", "占12长度"))
#如果需要居中输出在宽度前面加一个^
mat = "{:^20}\t{:^28}\t{:^32}"
print(mat.format("占4个长度","占8个长度", "占12长度"))
具名元组
优势:普通的元组,没有名称,有时候不太明白,每个字段的含义;而且具名元组很方便,不用创建类
创建一个具名元组需要两个参数,一个是类名,另一个是类的各个字段的名字。后者可
以是由数个字符串组成的可迭代对象,或者是由空格分隔开的字段名组成的字符串。
存放在对应字段里的数据要以一串参数的形式传入到构造函数中(注意,元组的构造函
数却只接受单一的可迭代对象)。你可以通过字段名或者位置来获取一个字段的信息
对对象进行切片
str1 它的正向排序, str1[0:19] = "daihaolong_love_luo"
str1[-19:] = "daihaolong_love_luo"
str1[:-1] = str1[-19:-1] = "daihaolong_love_lu" (左闭右开,开的时候,没有选中倒数第一个)
str1 = "daihaolong_love_luo"
str1[::-1] 相当于,在开始和结束为止,右边每隔一个取一个出来
str1[::-1] = "oul_evol_gnoloahiad"
str1[::-1] 相当于,在开始和结束为止,右边每隔2个取一个出来
str1[::-2] = "oleo_nlaid"
由列表组成的列表
board = [['_'] * 3 for i in range(3)] #一个包含 3 个列表的列表,嵌套的 3 个列表各自有 3 个元素来代表井字游戏的一行方块
weird_board = [['_'] * 3] * 3 # 含有 3 个指向同一对象的引用的列表是毫无用处的
list.sort方法和内置函数sorted
与 list.sort 相反的是内置函数 sorted ,它会新建一个列表作为返回值(返回的是初始输入的参数)。
简单来说就是。sorted输出的排序,不会对源列表产生影响。list.sort会改变源列表
字典推导
列表推导和生成器表达式的概念就移植到了字典上,从而有了字典推
导(后面还会看到集合推导)。字典推导(dictcomp)可以从任何以键值对作为元素的可迭
代对象中构建出字典。
数组:
如果我们需要一个只包含数字的列表,那么 array.array 比 list 更高效。数组支持所有跟
可变序列有关的操作,包括 .pop 、 .insert 和 .extend 。另外,数组还提供从文件读取和存
入文件的更快的方法,如 .frombytes 和 .tofile 。
- Python列表推导式和嵌套的列表推导式
列表推导式提供了一个更简单的创建列表的方法.常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列. 例如,假设我们想创建一个平方 ...
- python 列表推导式 - python基础入门(16)
截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率更高. 一.什么是推导式 推导式是从一个或者多个 ...
- python列表推导式详解
推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...
- Python 列表推导、迭代器与生成器
1.列表推导 1 2 3 4 5 6 7 8 9 10 11 numbers = [i for i in range(10) if i % 2 == 0] print(numbers) seq = ...
- python列表推导式详解 列表推导式详解 字典推导式 详解 集合推导式详解 嵌套列表推导式详解
推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...
- python列表推导同filter和map的比较
首先介绍下filter和map: filter: filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 该接收两个参数,第一个为函数,第二个为序列,序列的每个元 ...
- python(列表推导式和生成器表达式)
从母鸡下蛋的故事讲起 老母鸡 = ('鸡蛋%s'%i for i in range(10)) print(老母鸡) for 蛋 in 老母鸡: print(蛋) g = (i*i for i in r ...
- python列表推导式(扫盲)
1) 简单了解: 所谓的列表推导式,就是指的轻量级循环创建列表. 格式: 列表推导式的常见形式: my_list = [ item for item in iterable] my_list: 列表名 ...
- 迭代列表不要For循环,这是Python列表推导式最基本的概念
如果你还在使用 For 循环迭代列表,那么你需要了解了解列表推导式,看看它的基本概念都是什么. 列表解析式(List comprehension)或者称为列表推导式,是 Python 中非常强大和优雅 ...
随机推荐
- [WEB安全]XXE漏洞总结
目录 0x00 XML基础 0x01 XML文档结构 0x02 DTD 0x03 实体 0x04 XXE漏洞 0x05 总结一些payload 0x06 XXE漏洞修复与防御 0x07 参考链接 0x ...
- Java核心复习——J.U.C AbstractQueuedSynchronizer
第一眼看到AbstractQueuedSynchronizer,通常都会有这几个问题. AbstractQueuedSynchronizer为什么要搞这么一个类? 这个类是干什么的.有什么用? 这个类 ...
- 在CentOS7中安装zookeeper
参考:https://www.linuxidc.com/Linux/2016-09/135052.htm 1.zookeeper运行需要jdk环境,先确保有配置jdk,可以参考此处 2.下载解压zoo ...
- 感知机模型到DNN模型
参考资料 感知机模型:https://www.cnblogs.com/pinard/p/6042320.html DNN:https://www.cnblogs.com/pinard/p/641866 ...
- 在从myql服务器上 取消主从关系和重新构建主从关系
取消主从关系 mysql -uroot -p mysql>show slave status\G; 查看主库是否为之前的ip mysql>change master to master_h ...
- linux redis 设置密码:
在服务器上,这里以linux服务器为例,为redis配置密码. 1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效,) (1)首先进入redi ...
- 【转】Selenium-xpath详解
1.XPATH是什么 XPATH是一门在XML文档中查找信息的语言,XPATH可用来在XML文档中对元素和属性进行遍历,主流的浏览器都支持XPATH,因为HTML页面在DOM中表示为XHTML文档.X ...
- LeetCode_28. Implement strStr()
28. Implement strStr() Easy Implement strStr(). Return the index of the first occurrence of needle i ...
- (一)java面试易忘题目精选(1)
1. int和Integer有什么区别? 答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类 ...
- 使用一般处理程序生成 JSON
在 .NET 3.5 之后,定义在命名空间 System.Runtime.Serialization.Json 中的 DataContractJsonSerializer 可以帮助我们直接将一个对象格 ...