nsd1905_py01_day05
列表
- 列表属于容器、可变、序列
>>> alist = [13, 2, 356, 23]>>> alist[-1] = 100>>> alist[13, 2, 356, 100]>>> alist[1:3][2, 356]>>> alist[1:3] = [10, 20, 30]>>> alist[13, 10, 20, 30, 100]
字符串的方法
# 追加对象到列表的结尾>>> alist.append(200)# 统计列表中有几个10>>> alist.count(10)# 在下标为1的位置插入100>>> alist.insert(1, 100)# 反转列表>>> alist.reverse()# 清空列表>>> alist.clear()# extend用于将序列对象中的内容合并到列表>>> alist.extend('abc')>>> alist['a', 'b', 'c']>>> alist.append('abc')>>> alist['a', 'b', 'c', 'abc']>>> alist.extend(['bob', 'alice'])>>> alist['a', 'b', 'c', 'abc', 'bob', 'alice']# pop默认弹出最后一项>>> alist.pop()# 弹出下标为2的项>>> alist.pop(2)# 升序排序>>> alist.sort()# 降序排序>>> alist.sort(reverse=True)# 把alist的值复制给blist>>> blist = alist.copy()# 返回abc的下标>>> alist.index('abc')# 删除abc>>> alist.remove('abc')
元组
- 元组是容器、不可变、顺序
- 元组相当于是静态的列表
>>> atu = (10, 35, 20, 1, 8)>>> atu.atu.count( atu.index(>>> atu.count(35)1>>> atu.index(20)2
- 单元素元组必须有逗号,否则不是元组
>>> a = (10)>>> type(a)<class 'int'>>>> a10>>> b = (10,)>>> len(b)1>>> type(b)<class 'tuple'>>>> b(10,)
列表练习
- 思考程序的运行方式
# python stack.py(0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 2[](0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 0数据:(0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 2[](0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 0数据: hello(0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 2['hello'](0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 0数据: china(0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 2['hello', 'china'](0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 1从栈出弹出了: china(0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 2['hello'](0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 1从栈中弹出了: hello(0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 1栈已经为空(0) 压栈(1) 出栈(2) 查询(3) 退出请选择(0/1/2/3): 3Bye-bye
- 分析有哪些功能,编写功能函数
- 编写主程序代码
def push_it():
print('push')
def pop_it():
print('pop')
def view_it():
print('view')
def show_menu():
if __name__ == '__main__':
show_menu()
- 编写具体的函数语句块
字典
- 字典属于容器、可变、映射类型
- 字典的key不能重复,value可重复
- 字典的key必须是不可变对象
>>> adict = dict(['ab', ['name', 'bob'], ('age', 20)])
>>> adict
{'a': 'b', 'name': 'bob', 'age': 20}
>>> bdict = {}.fromkeys(['bob', 'alice', 'zs', 'ls'], 20)
>>> bdict
{'bob': 20, 'alice': 20, 'zs': 20, 'ls': 20}
>>> adict
{'a': 'b', 'name': 'bob', 'age': 20}
>>> for key in adict:
... print(key, adict[key])
>>> '%s is %s years old' % (adict['name'], adict['age'])
'bob is 20 years old'
>>> '%(name)s is %(age)s years old' % adict
'bob is 20 years old'
# 更新字典。字典中有key为修改,没有为添加
>>> adict['email'] = 'bob@tedu.cn'
>>> adict['age'] = 22
# 判断字典有没有某个key
>>> 'email' in adict
True
>>> 22 in adict
False
字典的方法
>>> adict.get('name') # 取出value
'bob'
>>> print(adict.get('qq')) # key不存在,默认返回None
None
>>> adict.get('name', 'not found')
'bob'
>>> adict.get('phone', '110') # value不存在,返回指定值
'110'
>>> adict.keys()
dict_keys(['a', 'name', 'age', 'email'])
>>> list(adict.keys()) # 返回所有的key
['a', 'name', 'age', 'email']
>>> adict.values() # 返回所有的value
>>> adict.items() # 返回(key, val)组成的列表
>>> adict.pop('a') # 弹出key为a的项目
>>> adict.popitem() # 弹出某个项目
# 合并字典
>>> adict.update({'name': 'tom', 'phone': '12363456'})
集合
- 集合是一个数学上的概念,它由不同元素构成
- 集合中的元素必须是不可变的
- 集合无序
- 集合就像是一个无值的字典
>>> s1 = set('abc')
>>> s2 = set('bccd')
>>> s1
{'a', 'b', 'c'}
>>> s2
{'d', 'b', 'c'}
>>> 'a' in s1
True
>>> len(s1)
3
>>> for i in s1:
... print(i)
# 取交集
>>> s1 & s2
{'b', 'c'}
# 取并集
>>> s1 | s2
{'b', 'a', 'd', 'c'}
# 取差补,s1中有,s2中没有的
>>> s1 - s2
{'a'}
集合的方法
>>> s1.add('new')
>>> s1
{'a', 'new', 'b', 'c'}
>>> s1.update('new')
>>> s1
{'e', 'new', 'w', 'n', 'b', 'a', 'c'}
>>> s1.remove('b')
>>> s3 = set('abcde')
>>> s4 = set('bcd')
>>> s3.issuperset(s4) # s3是s4的超集吗?
True
>>> s4.issubset(s3) # s4是s3的子集吗?
True
>>> s3.union(s4) # s3 | s4
{'b', 'e', 'a', 'd', 'c'}
>>> s3.intersection(s4) # s3 & s4
{'d', 'b', 'c'}
>>> s3.difference(s4) # s3 - s4
{'a', 'e'}
集合的应用
# 去重
>>> nums = [randint(1, 30) for i in range(20)]
>>> nums
[1, 29, 1, 4, 6, 30, 5, 21, 10, 13, 4, 4, 19, 17, 10, 10, 28, 21, 4, 17]
>>> set(nums)
{1, 4, 5, 6, 10, 13, 17, 19, 21, 28, 29, 30}
>>> list(set(nums))
[1, 4, 5, 6, 10, 13, 17, 19, 21, 28, 29, 30]
文件去重,找出mima中有,passwd中没有的行
(nsd1905) [root@room8pc16 day05]# cp /etc/passwd /tmp/mima
# 修改mima文件,使之与passwd不同
>>> with open('/etc/passwd') as f1:
... s1 = set(f1)
...
>>> with open('/tmp/mima') as f2:
... s2 = set(f2)
...
>>> s2 - s1
{'admin:x:3:4:adm:/var/adm:/sbin/nologin\n', 'hello world!\n'}
>>> with open('/tmp/result.txt', 'w') as f3:
... f3.writelines(s2 - s1)
(nsd1905) [root@room8pc16 day05]# cat /tmp/result.txt
