内置序列类型    

  Python 标准库用 C 实现了丰富的序列类型,列举如下。
  容器序列
    list、tuple 和 collections.deque 这些序列能存放不同类型的数据
  扁平序列
    str、bytes 和 array.array,这类序列只能容纳一种类型
    容器序列存放的是它们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是引用。
换句话说,扁平序列其实是一段连续的内存空间。
由此可见扁平序列其实更加紧凑,但是它里面只能存放诸如字符、字节和数值这种基础类型。
序列类型还能按照能否被修改来分类。
可变序列
  list、bytearray、array.array、collections.deque 和 memoryview。 不可变序列
  tuple、str 和 bytes

  

     列表推导和生成器表达式     

列表推导是构建列表(list)的快捷方式,
而生成器表达式则可以用来创建其他*任何类型*的序列
res = [
(i, j, k)
for i in range(10) # 也可以只有一层循环, 对应好参数
for j in range(10, 20)
for k in range(20, 30)
] res = (
(i, j, k)
for i in range(10) # 也可以只有一层循环, 对应好参数
for j in range(10, 20)
for k in range(20, 30)
)

e.g.

filter 和 map 合起来能做的事情,列表推导也可以做,而且还不需要借助难以理解和阅 读的 lambda 表达式。

symbols = '$¢£¥€¤'
beyond_ascii = [ord(s) for s in symbols if ord(s) > 127]
# beyond_ascii # == [162, 163, 165, 8364, 164] beyond_ascii_ = list(filter(lambda c: c > 127, map(ord, symbols)))
# beyond_ascii_ # == [162, 163, 165, 8364, 164]

用列表推导和 map/filter 组合来创建同样的表单

虽然也可以用列表推导来初始化元组、数组或其他序列类型,但是生成器表达式是更好的选择。
这是因为生成器表达式背后遵守了迭代器协议,可以逐个地产出元素,而不是先建立一个完整的
列表,然后再把这个列表传递到某个构造函数里。前面那种方式显然能够节省内存。
# 如果生成器表达式是一个函数调用过程中的唯一参数,那么不需要额外再用括号把它围起来。
def xxx(x):
for i in x:
print(i) xxx(i for i in range(10))

     元组     

有名元组:
collections.namedtuple 是一个工厂函数,它可以用来构建一个带字段名的元组和
一个有名字的类——这个带名字的类对调试程序有很大帮助
from collections import namedtuple

City = namedtuple("City", "name position aaa bbb xxx")
city = City("tokyo", 1, 2, 3, 4)
print(city)
print(city.name)

元组拆包:

元组其实是对数据的记录:元组中的每个元素都存放了记录中一个字段的数据,
外加这个字段的位置。正是这个位置信息给数据赋予了意义。
traveler_ids = [('USA', '31195855'), ('BRA', 'CE342567'), ('ESP', 'XDA205856')]

for i in traveler_ids:
print('%s-%s' % i)
用*接收不定长元素
a, *b = [('USA', '31195855'), ('BRA', 'CE342567'), ('ESP', 'XDA205856')]
print(a)
print(b)

切片:

  在 Python 里,像列表(list)、元组(tuple)和字符串(str)这类序列类型都支持切 片操作,但是实际上切片操作比人们所想象的要强大很多。

  在切片和区间操作里不包含区间范围的最后一个元素是 Python 的风格,这个习惯符合 Python、C 和其他语言里以 0 作为起始下标的传统。

当只有最后一个位置信息时,我们也可以快速看出切片和区间里有几个元 素:range(3) 和 my_list[:3] 都返回 3 个元素。
当起止位置信息都可见时,我们可以快速计算出切片和区间的长度,用后一个数减去 第一个下标(stop - start)即可。
这样做也让我们可以利用任意一个下标来把序列分割成不重叠的两部分,只要写成 my_list[:x] 和 my_list[x:] 就可以了。

切片和区间忽略最后一个元素

>>> lst = list(range(10))
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
SyntaxError: invalid syntax
>>> lst[1:3] = [11, 33]
>>> lst
[0, 11, 33, 3, 4, 5, 6, 7, 8, 9]
>>> lst[3:5] = [3355]
>>> lst
[0, 11, 33, 3355, 5, 6, 7, 8, 9]
>>> del lst[5:]
>>> lst
[0, 11, 33, 3355, 5]

给切片赋值

    数组    

如果我们需要一个只包含数字的列表,那么 array.array 比 list 更高效。数组支持所 有跟可变序列有关的操作,
包括 .pop、.insert 和 .extend。另外,数组还提供从文件读取和存入文件的更快的方法,如 .frombytes 和 .tofile。
from array import array
from random import random
floats = array('d', (random() for i in range(10**7))) # 利用一个可迭代对象来建立一个双精度浮点数组(类型码是 'd'),这里我们用的可 迭代对象是一个生成器表达式
floats[-1]
0.5749946228902657
fp = open('floats.bin', 'wb')
floats.tofile(fp)
fp.close()
floats2 = array('d') # 新建一个双精度浮点空数组
fp = open('floats.bin', 'rb')
floats2.fromfile(fp, 10**7)
fp.close()
floats2[-1]
0.5749946228902657

另外一个快速序列化数字类型的方法是使用pickle,pickle.dump 处理浮点 数组的速度几乎跟 array.tofile 一样快。不过前者可以处理几乎所有的内置数字 类型,包含复数、嵌套集合,甚至用户自定义的类。前提是这些类没有什么特别复杂 的实现。

从 Python 3.4 开始,数组类型不再支持诸如 list.sort() 这种就地排序方法。要给 数组排序的话,得用 sorted 函数新建一个数组。

参考《流畅的python》

数字&字符串的更多相关文章

  1. JAVA将数字字符串强制转换成整型变量----求参数之和实验代码(附流程图)

    一.设计思想 先将参数个数输出,并利用循环结果将参数逐个输出,再将字符串强制转化成整型,利用循环结构相加求和 二.程序流程图 三.源程序代码 package demo; public class Co ...

  2. js如何将纯数字字符串转换为long型

    1.js如何将纯数字字符串转换为long型? js 中 int的存储位数?最大十进制数表示是多少? 精度http://www.jb51.net/article/59808.htm 整数(不使用小数点或 ...

  3. double类型字符串转换成一个纯数字字符串和一个小数点位数的c++代码

    今天工作中遇到一个要不一个double型的字符串转换成一个纯字数字符串和一个标志这个数字字符串的小数点有几位的int类型 例如:“23.123”--->“23123” + 3   比较简单.就是 ...

  4. 基于visual Studio2013解决面试题之0503取最大数字字符串

     题目

  5. 在js中做数字字符串加0补位,效率分析

    分类: Jquery/YUI/ExtJs 2010-08-30 11:27 2700人阅读 评论(0) 收藏 举报 functiondate算法语言c 通常遇到的一个问题是日期的“1976-02-03 ...

  6. java数字字符串累加1的解决方案

    近期操作项目遇到这样的问题,研究了下搞出了一个解决方案. //num也可以是在数字字符串里面截取的,比如我有14位的数字字符串前六位是市级,7,8位代表县区,后两位代表乡镇,最后四位是累计+1的,这个 ...

  7. C# 设置Excel中的数字字符串格式

    在Excel中,数字字符串用不同格式表示,可代表不同数据意义.例如在财务报表里需要用特定的数字字符串格式来反映金额信息.货币币种.数据精确程度.增减趋势等等.下面分享如何通过C#编程来设置Excel表 ...

  8. is_numeric — 检测变量是否为数字或数字字符串

    is_numeric — 检测变量是否为数字或数字字符串 bool is_numeric ( mixed $var ) 如果 var 是数字和数字字符串则返回 TRUE ,否则返回 FALSE . 参 ...

  9. C#学习-图解教程(1):格式化数字字符串

    学习内容:C#:学习书籍:图解教程(中文第四版). 目录:第二章 C#编程概述 -----> 2.7 从程序中输出文本 -----> 2.7.5格式化数字字符串 using System; ...

  10. PHP is_numeric 检测变量是否为数字或数字字符串

    bool is_numeric ( mixed $var ) 如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE. For example 1: <?php $v = is_ ...

随机推荐

  1. Python运算符,基本数据类型

    1,基本的运算符: 加,减,乘,除 取余(%)   取商(//)   **(幂) in    not in (判断是否在里面) 1.运算符        结果是值            算数运算   ...

  2. CSS 点击事件

    :active 伪类向激活(在鼠标点击与释放之间发生的事件)的元素添加特殊的样式. 这个伪类应用于处于激活状态的元素.最常见的例子就是在 HTML 文档中点击一个超链接:在鼠标按钮按下期间,这个链接是 ...

  3. 尚硅谷springboot学习1-简介

    以前看过springboot的相关知识,当时偷懒没有做笔记,现在忘得已经差不多了,现在趁着过年有时间,再学习一遍,并做下笔记以备忘. 特性 Spring Boot来简化Spring应用开发,约定大于配 ...

  4. linux suse 3.0.101的一次中断暴增的排查

    本文相关背景知识可以在:http://man7.org/linux/man-pages/man5/proc.5.html?spm=5176.100239.blogcont6047.8.ImCGpr 看 ...

  5. 深入Spring Boot:怎样排查expected single matching bean but found 2的异常

    写在前面 这个demo来说明怎么排查一个常见的spring expected single matching bean but found 2的异常. https://github.com/hengy ...

  6. java split函数结尾空字符串被丢弃的问题

    参考: http://yinny.iteye.com/blog/1750210 http://www.xuebuyuan.com/1692988.html java中的split函数用于将字符串分割为 ...

  7. Rust语言学习笔记(5)

    Structs(结构体) struct User { username: String, email: String, sign_in_count: u64, active: bool, } let ...

  8. 11.mysql-权限.md

    目录 -- ***********五.mysql权限问题**************** -- mysql数据库权限问题:root :拥有所有权限(可以干任何事情) -- 权限账户,只拥有部分权限(C ...

  9. VC++ 中ListCtrl经验总结

    先注明一下,这里,我们用m_listctrl来表示一个CListCtrl的类对象,然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟report是大众话 ...

  10. c#栈和队列习题

    3.1 比较线性表.栈和队列这三种数据结构的相同点和不同点. 栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表.队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性 ...