python2中用str表示字节字符串,这种类型如今在Python3中用bytes对象来处理,明确区分字符串与字节html
python3中只有一种可以保存文本信息的数据类型,就是str,它是不可变序列,保存的是Unicode码位python
bytes以及可变的bytearray与str不一样,只能用字节做为序列值,即0<=x<=256范围内的整数。例如数据结构
>>>print(bytes([102,111,111])) b'foo'
对于bytes和bytearray,在转换为另外一种序列类型(如list或tuple)时能够显示其原本面目:例如:app
>>>list(b'foo bar') [102,111,111,32,98,97,114] >>>tuple(b'foo bar') (102,111,111,32,98,97,114)
从python3开始,全部没有前缀的字符串都是Unicode。所以,全部用单引号,双引号或成组的3个引号包围且没有前缀的值都表示str数据类型:函数
>>>type("some string") <class 'str'>
在python2中,Unicode须要有前缀(例如u"some string")。从python3.3开始,为保证向后兼容,仍然支持这个前缀,但它在python3中没有任何语法上的意义。性能
字节的明确语法:字节也被单引号,双引号或三引号包围,但必须有一个b或B前缀。测试
关于pytho字符串编码与解码参考: https://blog.csdn.net/trochiluses/article/details/16825269编码
python中字符串是不可变的,拼接任意多个字符串时在内存中会产生一个新的序列对象:好比lua
s="" for substring in substrings: s += substring
字符串s经过屡次拼接来建立一个新字符串,可是这中建立方式效率极低。幸亏python为咱们提供了str.join()方法。它接受一个可迭代字符串为参数。由于它是一个方法,实际调用时利用空字符串来调用,参数为须要拼接的迭代字符串spa
s="".join(substrings)
join方法还能够在须要合并的多个字符串之间插入分隔符
','.join(['a','b','c','d']) 'a,b,c,d'
虽然join方法速度更快,但并非全部须要拼接字符串的状况下都使用该方法。在下面几种状况下,join的性能可能还不如利用加法的普通拼接
python内置集合类型有:列表(list),元组(tuple),字典(dictionary),集合(set)
python中组基本的两种集合类型list和tuple,他们都是对象序列,列表时动态的,大小可变动,元组是不可变的,一旦建立就没法修改,所以也是可哈希(hashtable)的,便可做为字典中的key
列表中的方法操做详解参考:http://www.javashuo.com/article/p-mnsgbtkw-bs.html
咱们都值都,编写这样的代码时痛苦的
这种方法可能适用与C语言,但在python中的实际运行速度很慢,有如下缘由:
列表推导就是为了解决这个问题,它使用编排好的功能对上述语句的一部分作了自动化处理:
这种写法更加高效简短,也意味着更少的错误,更容易阅读和理解
python习语的另外一个典型例子就是使用enumerate(枚举)。在循环中使用列表时,这个内置函数能够很方便的获取其索引,列如:
它能够替换为下面这段更短的代码:
若是须要一个一个合并多个列表(或任意可迭代对象)中的元素,那么可使用内置的zip()函数。
注意:对zip函数返回的结果再次调用zip,能够将其恢复原状
另一种常见的语法元素是序列解包。这种方法适用与任意序列类型(列表,元组,字符串,字节序列等)。只要赋值运算符左边的变量和右边的元素数目相等,你均可以用这种方法将元素序列解包到另外一边的变量中:
解包还能够利用带*的表达式获取单个变量中的多个元素,只要它的解释没有歧义便可。还能够对嵌套序列进行解包。下面是一些更复杂的解包实例:
带*的表达是能够获取序列剩余部分
带*的表达是能够获取序列的中间部分
嵌套解包
字典能够用和前面列表推导相似的推导来建立一个新的字典。如:
重要的是,使用字典推导具备与列表推导相同的优势,所以字典推导要更加高效,更加简短,更加简洁。
字典的keys(),values()和items()3个方法的返回值类型再也不是列表,而且与之对应的iterkeys(),itervluae()和iteritems()原本返回的是迭代器,python3中已经没有这三个方法。python3中keys(),vlaues()和items()返回的是视图对象(view objects)
视图对象能够动态查看字典的内容,所以每次字典发生变化时,视图都会相应的变化:
获取字典长度使用len(len(words)),测试元素是否包含其中使用in子句
在keys和values方法返回的视图中,键和值的顺序时彻底对应的。但在python2中,若是你想要保证获取的键和值顺序彻底一致,须要在两次函数调用以前不能修改字典内容
字典的键必须时可哈希(hashable)的(可哈希:一个对象有一个整个生命周期值不变的散列值,而且能够和其余对象进行比较),python全部不变的类型都是可哈希的,可变类型(列表,字典和集合)是不可哈希的
字典是无序的,可是python标准库的collections模块提供了名为OrderedDict的有序字典
集合是一种很棒的数据结构,它与数学中的集合概念类型,有交集,并集等概念
Python的内置集合类型有两种:
set():可变的,无序的,有限的集合,其元素是惟一的,不可变的对象,集合中的元素必须是可哈希的
frozenset():不可变的,可哈希的,无序的集合,其元素是惟一的,不可变的对象,在一个set()或frozenset()中不能包含另外一个普通的可变set(),会抛异常TypeError
下面这种集合初始化的方法是彻底正确的:
建立可变集合有三种方法:
注意:空的集合对象是没有字面值的。空的花括号{}表示的是空的字典字面值