>>>a=(3)
>>>type(a)
<class 'int'>
>>>a=(3,)
>>>type(a)
<class 'tuple'>
>>>len(a)
1
>>> tuple('abcdefg') #把字符串转换为元组
('a', 'b', 'c', 'd', 'e', 'f', 'g')
>>> aList
[-1, -4, 6, 7.5, -2.3, 9, -11]
>>> tuple(aList) #把列表转换为元组
(-1, -4, 6, 7.5, -2.3, 9, -11)
>>> s = tuple() #空元组
>>> s
()
使用=将一个字典赋值给一个变量
>>> a_dict = {'server': 'db.diveintopython3.org', 'database': 'mysql'}
>>> a_dict
{'database': 'mysql', 'server': 'db.diveintopython3.org'}
>>> x = {} #空字典
>>> x
{}
使用dict
利用已有数据创建字典
>>> keys = ['a', 'b', 'c', 'd']
>>> values = [1, 2, 3, 4]
>>> dictionary = dict(zip(keys, values)) # 可迭代对象方式来构造字典
>>> dictionary
{'a': 1, 'c': 3, 'b': 2, 'd': 4}
>>> x = dict() #空字典
>>> x
{}
以给定内容为键,创建值为空的字典
dict.fromkeys(列表)
>>> adict = dict.fromkeys(['name', 'age', 'sex'])
>>> adict
{'age': None, 'name': None, 'sex': None}
以键作为下标可以读取字典元素,若键不存在则抛出异常
使用字典对象的get方法获取指定键对应的值,并且可以在键不存在的时候返回指定值(解决上一种方法的报错问题)
dict.get(key, default=None)
key – 字典中要查找的键。
default – 如果指定的键不存在时 ,返回该默认值,默认值就是none。
>>> aDict = {'name':'Dong', 'sex':'male', 'age':37}
>>> print(aDict.get('address'))
None
>>> print(aDict.get('address', 'SDIBT'))
SDIBT
>>>aDict['score'] = aDict.get('score',[])#同时做到字典的增加
[]
使用字典对象的setdefault
方法获取指定键对应的值,并且可以在键不存在的时候返回指定值,添加键并将值设为默认值。(上一种方法的进阶版)
dict.setdefault(key, default=None)
key – 查找的键值。
default – 键不存在时,设置的默认键值。
aDict = {'Name': 'Runoob', 'Age': 7}
print ("Age 键的值为 : %s" % aDict.setdefault('Age', None))
print ("Sex 键的值为 : %s" % aDict.setdefault('Sex', None))
print ("新字典为:", dict)
>>>
Age 键的值为 : 7
Sex 键的值为 : None
新字典为: {'Age': 7, 'Name': 'Runoob', 'Sex': None}
字典对象的items()方法返回字典的键、值对
items() 函数以列表返回可遍历的(键, 值) 元组。将字典中的键值对以元组存储,并将众多元组存在列表中。
字典对象的keys()方法返回字典的键
字典对象的values()方法返回字典的值
>>>for key, value in aDict.items():
print(key, value)
name Dong
sex male
age 37
score []
>>>aDict.keys()
dict_keys(['name', 'sex', 'age', 'score'])
>>>print(aDict.keys())
>>>dict_keys(['name', 'sex', 'age', 'score'])
>>>for key in aDict.keys():
print(key)
name
sex
age
score
value同理
>>>for key in aDict:
print(key) #不加特殊说明,默认输出键
name
sex
age
score
>>>aDict.update({'a':'a','b':'b'})
>>>aDict
{'name': 'Dong', 'sex': 'male', 'age': 37, 'score': [], 'a': 'a', 'b': 'b'}
使用del
删除整个字典,或者指定键的元素
del site['name']# 删除键是'name'的条目
del site #删除整个字典
使用字典对象的clear()方法来删除字典中所有元素,dict.clear()
dict.clear(); # 清空词典,但是不删除字典
使用字典对象的pop()方法删除并返回指定键的元素
>>>aDict.update({'a':'a','b':'b'})
>>>aDict
{'name': 'Dong', 'sex': 'male', 'age': 37, 'score': [], 'a': 'a', 'b': 'b'}
>>>pop_obj=aDict.pop('name')
>>>pop_obj
'Dong'
>>>aDict
{'sex': 'male', 'age': 37, 'score': [], 'a': 'a', 'b': 'b'}
使用字典对象的popitem()
方法随机返回并删除字典中的一个元素(一般删除末尾对)
如果字典已经为空,却调用了此方法,就报出KeyError
异常
>>>pop_obj=aDict.popitem() # 随机返回并删除一个键值对
首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数
import string
import random
x=string.ascii_letters+string.digits+string.punctuation
y=[random.choice(x) for i in range(1000)]
z=''.join(y)
d=dict()
for ch in z:
d[ch]=d.get(ch,0)+1
print(d)
String模块:
ascii_letters
是生成所有字母,从a-z和A-Z, digits是生成所有数字0-9,punctuation #所有的标点字符.
random.choice( seq )
:
返回一个列表,元组或字符串seq的随机项。
str.join(sequence)
:
返回通过指定字符str
连接序列sequence
中元素后生成的新字符串
collections是Python内建的一个集合模块,使用时需要导入collections模块。其提供了许多其他数据类型。包括计数器(counter),有序字典(orderedDict
),默认字典(defaultdict
),可命名元组(namedtuple
)和双向队列(deque
)
{键表达式:值表达式for 可迭代对象 [if 条件表达式]}
举例:
>>> {i:str(i) for i in range(1, 5)}
{1: '1', 2: '2', 3: '3', 4: '4'}
>>> x = ['A', 'B', 'C', 'D']
>>> y = ['a', 'b', 'b', 'd']
>>> {i:j for i,j in zip(x,y)}
{'A': 'a', 'C': 'b', 'B': 'b', 'D': 'd'}
举例
>>>a={1,2,3}
>>>type(a)
<class 'set'>
>>a=[1,2,3245,245,45,351,1]
>>>a=set(a) #自动删除重复的元素
>>>a
{1, 2, 45, 3245, 245, 351}
>>>type(a)
<class 'set'>
>>>a=set() #创建空集合
>>>a
set()
add操作
>>>a={1,2}
>>>a.add(3)
>>>a
{1, 2, 3}
当不再使用某个集合时,可以使用del
命令删除整个集合。集合对象的pop()方法弹出并删除其中一个元素,remove()方法直接删除指定元素,clear()方法清空集合。
重点说一下pop操作,集合中使用pop和列表中使用pop是不一样的,因为集合是无序数据类型,所以索引没有意义
>>> a = {1, 4, 2, 3}
>>> a.pop() #不接受参数
1
>>> a_set = set([8, 9, 10, 11, 12, 13])
>>> b_set = {0, 1, 2, 3, 7, 8}
>>> a_set | b_set
>>>a_set.union(b_set)#并集,按位或运算符,两种表示方式
{0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13}
>>> a_set.union(b_set) #并集
{0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13}
>>> a_set & b_set #交集,按位与运算符
{8}
>>> a_set.intersection(b_set) #交集
{8}
>>> a_set.difference(b_set) #差集
{9, 10, 11, 12, 13}
>>> a_set - b_set
{9, 10, 11, 12, 13}#两种表示方式
>>> a_set.symmetric_difference(b_set) #对称差集
{0, 1, 2, 3, 7, 9, 10, 11, 12, 13}
>>> a_set ^ b_set #按位异或运算符
{0, 1, 2, 3, 7, 9, 10, 11, 12, 13}
>>> x = {1, 2, 3}
>>> y = {1, 2, 5}
>>> z = {1, 2, 3, 4}
>>> x.issubset(y) #测试是否为子集
False
>>> x.issubset(z)
True
>>> {3} & {4}
set()
>>> {3}.isdisjoint({4}) #如果两个集合的交集为空,返回True
True
>>> x = {1, 2, 3}
>>> y = {1, 2, 5}
>>> z = {1, 2, 3, 4}
>>> x < y #比较集合大小/包含关系
False
>>> x < z #真子集
True
>>> y < z
False
>>> {1, 2, 3} <= {1, 2, 3} #子集
True
形式:{ 表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] }
>>> s = {x.strip() for x in (' he ', 'she ', ' I')}
>>> s
{'I', 'she', 'he'}