列表推导是一种构建列表(list)的快捷方式

#列表推导
symbols = '!@#$%'
codes = [ord(symbol) for symbol in symbols] #ord()Python内置函数,将字符变成Unicode码位,返回值为对应十进制
print(codes)

列表推导同filter()和map()比较

"""
1.fitter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
语法:
filter(function, iterable)
参数:
function -- 判断函数
iterable -- 可迭代对象 2.map()函数会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
语法:
map(function, iterable, ...)
参数:
function -- 函数
iterable -- 一个或多个序列 3.lambda函数是一个简短的匿名函数,可以接收任意数量的参数,但只能包含一个表达式。
语法:
lambda 参数:表达式
"""
symbols = '!@#$%'
codes = [ord(symbol) for symbol in symbols if ord(symbol) > 50]
print(codes) codes = list(filter(lambda c: c > 50, map(ord, symbols)))
print(codes)

笛卡尔积:用列表推导可以生成两个或以上的可迭代类型的笛卡儿积。笛卡儿积是一个列表,列表里的元素是由输入的可迭代类型的元素对构成的元组,因此笛卡儿积列表的长度等于输入变量的长度的乘积

colors = ['black', 'white']
sizes = ['S', 'M', 'L']
tshirt = [(color, size) for color in colors for size in sizes]
print(tshirt) tshirt = [ ]
for color in colors:
for size in sizes:
tshirt.append((color, size))
print(tshirt) tshirts = [(color, size) for size in sizes
for color in colors]
print(tshirts)

虽然也可以用列表推导来初始化元组、数组或其他序列类型,但是生成器表达式是更好的选择。这是因为生成器表达式背后遵守了迭代器协议,可以逐个地产出元素,而不是先建立一个完整的列表,然后再把这个列表传递到某个构造函数里。前面那种方式显然能够节省内存。生成器表达式的语法跟列表推导差不多,只不过把方括号换成圆括号而已。

#用生成器表达式初始化元组和数组
symbols = '!@#$%'
codes = tuple(ord(symbol) for symbol in symbols)
print(codes) import array
arr = array.array('I', (ord(symbol) for symbol in symbols))
print(arr) #使用生成器表达式计算笛卡尔积
colors = ['black', 'white']
sizes = ['S', 'M', 'L'] # '%s'%表示格式化一个对象为字符
for tshirt in ('%s %s' % (c, s) for c in colors for s in sizes):
print(tshirt)

—————————————————————————————————————————————————————————

元组拆包可以应用到任何可迭代对象上,唯一的硬性要求是,被可迭代对象中的元素数量必须要跟接受这些元素的元组的空档数一致。除非我们用 * 来表示忽略多余的元素。

#元组拆包: 平行赋值,也就是说把一个可迭代对象里的元素,一并赋值到由对应的变量组成的元组中
alpha_num = ('a', 97)
alpha, num = alpha_num
print(alpha, num) #不使用中间变量交换两个变量的值
a = 'a'
b = 97
b, a = a, b
print(a, b) #用 * 运算符把一个可迭代对象拆开作为函数的参数
print(divmod(20, 8))#divmod(a, b)函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
t = (20, 8)
print(divmod(*t)) #让一个函数可以用元组的形式返回多个值
import os
_, filename = os.path.split('test.txt')#函数返回路径和文件名
print(filename) #用*来处理剩下的元素
a, b, *rest = range(5)
print(a, b, rest)
#在平行赋值中,* 前缀只能用在一个变量名前面,但是这个变量可以出现在赋值表达式的任意位置
a, *body, c, d = range(5)
print(a, body, c, d)

#嵌套元组拆包
alpha_a = [('a', 'A', (97, 65))]
for small, capital, (num_small, num_capital) in alpha_a:
print(num_small, num_capital) #具名元组collections.namedtuple 是一个工厂函数,它可以用来构建一个带字段名的元组和一个有名字的类
#创建一个具名元组需要两个参数,一个是类名,另一个是类的各个字段的名字。后者可以是由数个字符串组成的可迭代对象,或者是由空格分隔开的字段名组成的字符串。
from collections import namedtuple
Country_Capital = namedtuple('c_c', 'country capital')
comb = Country_Capital('China', 'Beijing')
print(comb) #具名元组还有一些自己专有的属性。中就展示了几个最有用的:_fields 类属性、类方法 _make(iterable) 和实例方法_asdict()。
#_fields 属性是一个包含这个类所有字段名称的元组,
#用 _make() 通过接受一个可迭代对象来生成这个类的一个实例,它的作用跟City(*delhi_data) 是一样的。
#_asdict() 把具名元组以 collections.OrderedDict 的形式返回,我们可以利用它来把元组里的信息友好地呈现出来。
print(Country_Capital._fields)
print(Country_Capital._make(comb))
print(comb._asdict())
for key, value in comb._asdict().items():
print(key + ':', value)

——————————————————————————————————————————————————————

Python学习笔记:序列构成的数组的更多相关文章

  1. Python学习笔记3-Python元组、数组、字典集合的操作

    在Python中数组中的每一项可以是不同的数据类型 元组:只能读不能写的数组 aTuple=(1,'abc','tmc',79.0,False) print aTuple[1:3] print typ ...

  2. Python学习笔记(1)——数组差集

    面试的时候被问到这样一个问题:有A.B两个数组,找出B中有A中没有的所有元素(换言之即是求差集B-A).当时比较紧张,用了最原始的双重嵌套循环逐个比较,很显然这种时间复杂度高达O(n2)的算法相当lo ...

  3. python学习笔记:数据类型——列表/数组(list)

    Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素.通过下标访问列表中的元素(又称索引.角标),下标从0开始计数.list定义,使用中括号[]. l ...

  4. Python学习笔记_二维数组的查找判断

    在进行数据处理的工作中,有时只是通过一维的list和有一个Key,一个value组成的字典,仍无法满足使用,比如,有三列.或四列,个数由不太多. 举一个现实应用场景:学号.姓名.手机号,可以再加元素 ...

  5. Python学习笔记----序列共性

    序列操作符 作用seq[ind] 获得下标为ind 的元素seq[ind1:ind2] 获得下标从ind1 到ind2 间的元素集合seq * expr 序列重复expr 次seq1 + seq2 连 ...

  6. Python 学习笔记之 Numpy 库——数组基础

    1. 初识数组 import numpy as np a = np.arange(15) a = a.reshape(3, 5) print(a.ndim, a.shape, a.dtype, a.s ...

  7. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  8. python学习笔记(一)、列表和元祖

    该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.通用的序列操作 有几种操作适用于所有序列,包括索引.切片.相加.相乘和成员资格检查.另外,Pyt ...

  9. Deep learning with Python 学习笔记(10)

    生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...

  10. Deep learning with Python 学习笔记(6)

    本节介绍循环神经网络及其优化 循环神经网络(RNN,recurrent neural network)处理序列的方式是,遍历所有序列元素,并保存一个状态(state),其中包含与已查看内容相关的信息. ...

随机推荐

  1. nRF5 SDK Bootloader and DFU moudles(1)

    在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行.可以初始化硬件设备.建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境. 在嵌 ...

  2. Kudu建表语句

    --建表CREATE TABLE kudu_testdb.perf_test_t1( id string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY, int ...

  3. 【重启C++】 关于 【类】

    1.什么是抽象类 带有纯虚函数成员的类,称为抽象类.抽象类不能被实例化,因为如果能实例化,调用这个纯虚的成员函数时怎么处理. 2.什么是纯虚函数 纯虚函数是在声明虚函数时被“初始化”为0的函数.声明纯 ...

  4. HDU-6704 K-th occurrence (后缀自动机father树上倍增建权值线段树合并)

    layout: post title: HDU-6704 K-th occurrence (后缀自动机father树上倍增建权值线段树合并) author: "luowentaoaa&quo ...

  5. SOS--DP(基础版本)未压缩空间

    #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>//sprintf islower isupp ...

  6. 屹今为止最好用的HTTP客户端命令行工具-接口调试神器HTTPie

    一.思考❓❔ 1.你用过哪些http客户端调试工具? Postman 不够灵活 需要打开客户端, 麻烦 学习成本高 Jmeter 臃肿 麻烦 学习成本高 curl 参数多, 记不住 不够灵活 主要在L ...

  7. Censoring(栈+KMP)

    # 10048. 「一本通 2.2 练习 4」Censoring [题目描述] 给出两个字符串 $S$ 和 $T$,每次从前往后找到 $S$ 的一个子串 $A=T$ 并将其删除,空缺位依次向前补齐,重 ...

  8. 并不对劲的复健训练-CF1187D

    题目大意 有两个长度为\(n\)的序列\(a_1,...,a_n\),\(b_1,...,b_n\)(\(a,b\leq n\leq 3\times 10^5\) ).一次操作是选取 \([l,r]\ ...

  9. whistle学习(二)之启动、停止、重启、更新whistle等命令

    新版本的whistle支持三种等价命令whistle,w2,wproxy 启动whistle w2 start 启动时指定端口 w2 start -p (// 不设置端口默认使用8899) 默认端口为 ...

  10. form表单中的enctype 属性以及post请求里Content-Type方式

    对于form表单中的enctype 属性之前理解的一般,就知道是类似于一种编码形式.后来公司做一个form表单提交数据的时候,重点是这个form表单里有文件上传,而我又要用vue来模拟form表单提交 ...