据说python里有6个标准的数据类型:
- Numbers(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Sets(集合)
- Dictionaries(字典)
Numbers(数字)
python3 支持int、float、bool、complex
还可以通过一个叫type()
的函数来输出类型,自己测试了一下
Python 3.4.0 (default, Apr 11 2014, 13:05:18)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a,b,c,d = 10,2.5,True,4+3j
>>> print(type(a),type(b),type(c),type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
>>>
还有运算:
>>> 1 + 1 #加
2
>>> 1 - 1 #减
0
>>> 1 × 1 #乘
File "<stdin>", line 1
1 × 1 #乘
^
SyntaxError: invalid character in identifier
>>> 1 * 1 #乘
1
>>> 3 / 2 #浮点数除
1.5
>>> 3 // 2 #整除
1
>>> 3 % 2 #取模
1
>>> 2 ** 4 #幂
16
>>> pow(2,4) #幂
16
String(字符串)
这个没什么好说的,上一节感觉熟练了一下。
可以用*
来重复字符串,用+
来拼接字符串,用string[index]
来取字符,或者用string[-index]
来倒着取字符。和ruby一样一样的。
还有字符串分割string[index_x:index_y]
但是不能通过string[index] = x
进行赋值,因为字符串是不可改变的。
List(列表)
先说列表的赋值吧,一个列表中可以扔进任何一个类型的数据,不用在意类型。例如
>>> a = ['him', 25, 100, 'her']
>>> print(a)
['him', 25, 100, 'her']
它还支持拼接、修改、分割操作,
>>> a = [1, 2, 3, 4, 5]
>>> a + [6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> a = [1, 2, 3, 4, 5, 6]
>>> a[0] = 9
>>> a[2:5] = [13, 14, 15]
>>> a
[9, 2, 13, 14, 15, 6]
>>> a[2:5] = [] # 删除
>>> a
[9, 2, 6]
(元组)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号里,元素之间用逗号隔开。
例如:
>>> a = (1991, 2014, 'physics', 'math')
>>> print(a, type(a), len(a))
(1991, 2014, 'physics', 'math') <class 'tuple'> 4
元组与字符串类似,可以被索引且下标索引从0开始,也可以进行截取/切片(看上面,这里不再赘述)。
其实,可以把字符串看作一种特殊的元组。
>>> tup = (1, 2, 3, 4, 5, 6)
>>> print(tup[0], tup[1:5])
1 (2, 3, 4, 5)
>>> tup[0] = 11 # 修改元组元素的操作是非法的
虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
构造包含0个或1个元素的tuple是个特殊的问题,所以有一些额外的语法规则:
tup1 = () # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号
另外,元组也支持用+操作符:
>>> tup1, tup2 = (1, 2, 3), (4, 5, 6)
>>> print(tup1+tup2)
(1, 2, 3, 4, 5, 6)
Sets(集合)
集合(set)是一个无序不重复元素的集。
好熟悉的结构,哈哈哈。
基本功能是进行成员关系测试和消除重复元素。
可以使用大括号 或者 set()函数创建set集合,注意:创建一个空集合必须用 set() 而不是 { },因为{ }是用来创建一个空字典。
下面来个例子吧:
>>> set_text = {'item0','item1','item2','item3','item4','item5','item6'}
>>> print(set_text)
{'item1', 'item4', 'item3', 'item2', 'item6', 'item5', 'item0'}
>>> #果然是无序的
...
>>> 'item3' in set_text #成员测试?
True
>>> 'item7' in set_text #成员测试?
False
>>> #据说还可以进行集合运算
...
>>> a = set(sadfdsafsdfas)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sadfdsafsdfas' is not defined
>>> a = set('sadfdsafsdfas')
>>> b = set('sdlifjxz')
>>> a
{'d', 'a', 'f', 's'}
>>> b
{'z', 'd', 'l', 'f', 'x', 'j', 's', 'i'}
>>> b-a #差
{'x', 'l', 'j', 'i', 'z'}
>>> a | b #并
{'z', 'd', 'f', 'l', 'x', 'j', 'a', 's', 'i'}
>>> a & b #交
{'d', 'f', 's'}
>>> a ^ b #a和b中不同时存在的元素
{'z', 'l', 'x', 'j', 'a', 'i'}
Dictionaries(字典)
这应该就是在C里用的map
吧,一个映射类型。其中的key必须是不可变类型,list
和tuple
就不行了。
基本操作:添删改查
>>> dic = {} #空字典
>>> dic
{}
>>> dics = {'tom':1,'jerry':10,'cat':11}
>>> dics
{'jerry': 10, 'cat': 11, 'tom': 1}
>>> dics['tom'] #查
1
>>> dics['toms'] #查空
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'toms'
>>> del dics['tom'] #删
>>> dics
{'jerry': 10, 'cat': 11}
>>> dics['mouse'] = 100 #添
>>> dics
{'mouse': 100, 'jerry': 10, 'cat': 11}
>>> dics['mouse'] = 101 #改
>>> dics
{'mouse': 101, 'jerry': 10, 'cat': 11}
进阶操作:
>>> list (dics.keys()) #返回所有key组成的list
['mouse', 'jerry', 'cat']
>>> list (dics.values()) #返回所有value组成的list
[101, 10, 11]
>>> sorted (dics.keys()) #按key排序
['cat', 'jerry', 'mouse']
>>> 'cat' in dics #成员测试?
True
>>> 'cats' in dics #成员测试?
False
奇葩的构造方式,从sequence中构建
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'jack': 4098, 'sape': 4139, 'guido': 4127}
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}
>>> dict(sape=4139, guido=4127, jack=4098)
{'jack': 4098, 'sape': 4139, 'guido': 4127}