《Python3 程序开发指南》

序列包括元组和列表,首先,我们介绍元组。

元组--tuple

元组为有序的序列,元组和字符串一样也是固定的,不能替换或删除其中的任意数据项。如果需要修改应使用列表而非元组,若修改元组,则需要通过使用list()转换函数将其转换为列表再修改。一元组中,逗号是必须的

元组方法:

t.count(x):返回对象x在元组中出现的次数

t.index(x):返回对象在元组t中出现的最左边位置,若t中不包含x,则产生ValueError异常。

操作符:

+ :连接

* :赋值

[] :分片

in,not in:测试成员关系

命名的元组:

可以根据名称引用元组中的项,使我们可创建数据项的聚集。collections模块提供了namedtuple()函数,该函数用于创建自定义的元组数据类型。collections.namedtuple()第一个参数为要创建的自定义元组数据类型的名称,第二个参数为字符串,包含使用空格分隔的名称,每个名称代表该数据类型的一项。该函数返回一个自定义的类,可用于创建命名的元组。

>>> import collections
>>> Sale = collections.namedtuple("Sale","productid customerid date quality price")
>>> Sale
<class '__main__.Sale'>
>>> sales = []
>>> sales.append(Sale(432,924,"2011-09-23",3,7.8))
>>> sales.append(Sale(344,956,"2011-09-24",1,5.7))
>>> total = 0
>>> for sale in sales:
total += sale.quality * sale.price >>> print "Total ${0:.2f}".format(total)
Total $29.10

  下面介绍几个例子,方便理解:

>>> Aircraft = collections.namedtuple("Aircraft","manufacturer model seating")
>>> Seating = collections.namedtuple("Seating","min max")
>>> aircraft = Aircraft("Airbus","A320-200",Seating(100,220))
>>> aircraft.seating.max
220 通过命名的元组属性来访问元组中的项
>>> print "{0} {1}".format(aircraft.manufacturer,aircraft.model)
Airbus A320-200 使用一个单独的位置参数,并在格式化字符串中使用命名的元组属性名作为字段名
>>> print "{0.manufacturer} {0.model}".format(aircraft)
Airbus A320-200 namedtuple._asdict()方法返回的是键值对的映射,其中每个键都是元组元素的名称,值则是对应的值,使用映射拆分将映射转换为str.format()方法的键-值参数
>>> print "{manufacturer} {model}".format(**aircraft._asdict())
Airbus A320-200

  

     列表--list

列表是可变的,可以对列表中的项进行删除、替换。列表中所有数据项实际为对象引用,与元组一样,列表也可存放任意数据类型的数据项,可使用标准的比较操作符。

列表方法

L.append(x) 将单个数据项x追加到列表L的尾部
L.count(x) 返回数据项x在L中出现的次数

L.extend(m)

L += m

将列表m的项追加到L的结尾处,操作符 += 完成相同的功能
L.index(x,start,end) 返回数据项x在列表L中(或L的分片中)最左边出现的索引位置,否则产生ValueError异常
L.insert(i,x) 在索引位置 i 处将数据项x插入列表L
L.pop() 返回并移除L最右边的数据项
L.pop(i) 返回并移除L中index为i的数据项
L.remove(x) 从L中移除最左边出现的数据项x,如果找不到x就产生ValueError异常
L.reverse() 对列表L进行翻反转
L.sort(...) 对列表L进行排序

序列拆分:尽管可以使用分片存取列表中的数据项,但在有些情况下,需要一次提取两个或更多个数据项,则可使用序列拆分,即*。任意可迭代的(列表、元组等)数据类型都可以使用序列拆分。

>>> first,*rest=[9,2,-4,8,7]
>>> first,rest
(9,[2,-4,8,7]) >>> first,*mid,last="a b c d e".split()
>>> first,mid,last
('a',['b','c','d'],'e') >>> *dir,exe = "/usr/local/bin/gvim".split("/")
>>> dir,exe
(['','usr','local','bin'],'gvim')

 带星号的参数

*rest称为带星号的表达式。下面有一个函数:
定义一个函数
>>> def product(a,b,c):
return a*b*c 普通调用
>>> product(2,3,5)
30 使用带星号的参数,列表L的3个数据项被*拆分
>>> L=[3,4,5]
>>> product(*L)
60 第一个参数为常规传递,另两个参数则通过对列表L的数据分片拆分得到
>>> product(2,*L[1:])
40

  

 操作符*区分:---拆分和多复制

(1)当*出现在复制操作的左边时,用作拆分

(2)出现在其他位置时:若用作单值操作符,则代表拆分操作符;若用作二进制操作符,则代表多复制操作符

 列表内涵

列表内涵是一个表达式,也是一个循环,作用:为列表生成数据项,并且可以使用条件过滤掉不需要的数据项。形式如下:

[item for item in iterable]

实现列表内涵的常用语法格式:

[expression for item in iterable]

[expression for item in iterable if condition]

举例如下:

>>> leaps = [y for y in range(1900,1940)]
>>> leaps
[1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939]
也可以用range实现
>>> leaps = list(range(1900,1940))
>>> leaps
[1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939] 求规定时间内的闰年
>>> leaps = [y for y in range(1900,1940) if (y%4==0 and y%100 != 0) or (y%400==0)]
>>> leaps
[1904, 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936]

  可嵌套:

例如对给定的性别(f,m)尺寸(s,m,l,x)、颜色(b,g,w)给出所有的组合,但排除肥胖女士

>>> codes=[s+z+c for s in "mf" for z in 'smlx' for c in "bgw" if not (s=="f" and z =="x")]
>>> codes
['msb', 'msg', 'msw', 'mmb', 'mmg', 'mmw', 'mlb', 'mlg', 'mlw', 'mxb', 'mxg', 'mxw', 'fsb', 'fsg', 'fsw', 'fmb', 'fmg', 'fmw', 'flb', 'flg', 'flw']

  

如果生成的列表非常大,那么使用生成器会比列表内涵更高效

Python元组、列表--笔记的更多相关文章

  1. python元组 列表 (取值、替换、插入、添加、删除)

    1.元组 列表 字典 元组( 元组是不可变的) hello = (1,2,3,4,5) type(hello)

  2. python 元组 列表 字典

    type()查看类型 //取整除 **幂 成员运算符: in  x在y序列中,就返回true 反之  not in 身份运算符: is is not 逻辑运算符 and or not 字符编码 问题 ...

  3. python 元组列表合并

    #create a tuple l = [(,), (,), (,)] print(list(zip(*l)))

  4. python 元组列表转为字典

    #create a list l = [(), (), (), (), (), ()] d = {} for a, b in l: d.setdefault(a, []).append(b) prin ...

  5. Python中列表、元组、字典、集合与字符串,相关函数,持续更新中……

    本篇博客为博主第一次学 Python 所做的笔记(希望读者能够少点浮躁,认真阅读,平心静气学习!) 补充: 列表.元组和字符串共同属性: 属于有序序列,其中的元素有严格的先后顺序 都支持双向索引,索引 ...

  6. python中列表 元组 字典 集合的区别

    列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...

  7. Python基础------列表,元组的调用方法

    Python基础------列表,元组的调用方法@@@ 一. 列表 Python中的列表和歌曲列表类似,也是由一系列的按特定顺序排列的元素组成的,在内容上,可以将整数,实数,字符串,列表,元组等任何类 ...

  8. Python中列表、元组、集合、字典

    Python 列表(List) 列表是最常用的Python数据类型: 列表中的数据项不需要具有相同的类型: 列表也叫做数组,定义时使用[]: 通过下标访问列表中的元素,下标从 0  开始计数 列表的增 ...

  9. Python 学习笔记(九)Python元组和字典(一)

    Python 元组 元组的定义  元组(tuple)是一种Python对象类型,元组也是一种序列 Python中的元组与列表类似,不同之处元组的元素不能修改 元组使用小括号,列表使用方括号 元组的创建 ...

  10. python 元组不变 列表可变

    python 元组不变 列表可变 1,   --元组,注意要有逗号: [1] --列表 竟然才开始写python blog:

随机推荐

  1. 【USACO 2.3.5】控制公司

    [题目描述] 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.例如,福特公司拥有马自达公司12%的股票.据说,如果至少满足了以下三个条件之一,公司A就可以控制公司B了: 公司 ...

  2. magnific-popup 一款优秀, 多种功能于一身的弹出层jQuery插件.

    功能很强大:灯箱, 画廊, 放大图片, 弹出Youtube GoogleMap, ajax读取popup等等文档:http://dimsemenov.com/plugins/magnific-popu ...

  3. Xshell下漂亮的开发环境配置

    今天折腾了一天Xshell配置Linux命令行开发环境. 总结几点: 1.Xshell配色方案,这是我自己调的个人使用版,网上比较好的版本有Solarized Dark,可以下载到. [ColorFo ...

  4. RemoteWebDriver使用说明

    1. 本地代码使用RemoteWebDriver启动: public class Testing { public void myTest()throws Exception { WebDriver ...

  5. Shell test命令

    Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于 ...

  6. C# Trim方法去除字符串两端的指定字符

    var str= ",2,3,4,6,7,"; var str2 = str.Trim(new char[] { ',' }); //去除字符串str两端的','字符. //则st ...

  7. MLlib-分类与回归

    MLlib支持二分类,多酚类和回归分析的多种方法,具体如下: 问题类别 支持方法 二分类 线性支持向量机, 逻辑回归,决策树,朴素贝叶斯 多分类 决策树,朴素贝叶斯 回归 线性最小二乘,Lasso,r ...

  8. Symmetry(对称轴存在问题)

    Symmetry Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description   Th ...

  9. 清橙A1484

    http://www.tsinsen.com/ViewGProblem.page?gpid=A1484### 题解: 在线插入并不好做,我们将所有操作离线,变为删除操作. 每次询问的时候对于当前B串所 ...

  10. IOS--UIActivityIndicatorView的使用方法详细

    IOS--UIActivityIndicatorView的使用方法详细   // UIActivityIndicatorView的常用方法 活动指示器,就是旋转进度轮 UIActivityIndica ...