参考文档
http://www.cnblogs.com/alex3714/articles/5717620.html
列表:[]
基本操作:
索引
切片
追加
删除
长度
切片
循环
包含
names = ['xiaxiaofan', 'jiangshuying', 'dengchuhan', 'summer']
# name_of_dengchuhan = names['dengchuhan'] # 此种取法是错误的
print(names[0], names[1]) # 位置从0开始算|二进制010101
# 切片
print(names[1:3]) # 字符串切片|顾头部不顾尾(从左往右数)|返回列表
print(names[-1]) # 取最后一个
# print(names[-1:-3]) # 取后面两个此时返回[]|从左往右取
print(names[-2:]) # 取后面两个|此处省略不写表示取值到末尾|前后都可以省略
# 添加
names.append('xiaobai') # 注:此时直接打印返回的值是None
print(names)
# names.insert(位置,字符串) 在指定位置插入|不能批量插入,只能一个一个来
names.insert(1, 'others')
print(names)
# 修改
# names[位置]=字符串 修改
names[1] = 'weather'
print(names)
# 删除
'''
names.remove('summer') # 删除指定字符串
print(names)
del names[1] # 删除指定位置
print(names)
names.pop() # 默认删除最后一个|当添加参数时,删除所制定位置的
print(names)
'''
# 查找
print(names)
print(names.index('dengchuhan')) # 查找指定字符串的位置
print(names[names.index('dengchuhan')]) # 根据位置返回制定的字符串
names.insert(2, 'xiaobai')
print(names.count('xiaobai')) # 统计字符串出现次数|可以重复
# names.clear() 清空列表
# names.reverse() 反转
# names.sort() #排序|按照ASCII的规则
new_names = [1, 2, 3, 4]
names.extend(new_names) # 合并
print(names, new_names) # 此时new_names还存在
# del new_names 删除
#浅copy
# names = ['xiaxiaofan', 'jiangshuying', 'dengchuhan', 'summer']
names = ['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
#里面嵌套的列表是重新指向的一块内存地址
names2 = names.copy() # 浅copy:只修改第一层|复制之后,name和name2指向同一块内存地址
print(names)
print(names2)
# names['dengchuhan']='邓楚涵' 错误的修改方法|必须用下标
names[3] = '邓楚涵'
print(names)
print(names2) # name2此时没有修改
names[2][0] = 'Alex'
print(names)
print(names2) # 此时都修改了
----------
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], '邓楚涵', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['Alex', 'jack'], '邓楚涵', 'summer']
['xiaxiaofan', 'jiangshuying', ['Alex', 'jack'], 'dengchuhan', 'summer']
----------
#浅copy创建联合账号
person = ['name', ['saving', 100]]
'''
# 浅copy:三种方式
#p1 = copy.copy(person)
# p1 = person[:]
# p1 = license(person)
'''
p1 = person[:]
p2 = person[:]
p1[0] = 'alex'
p2[0] = 'fengjie'
p1[1][1] = 50
print(p1)
print(p2)
#深copy
import copy
# names = ['xiaxiaofan', 'jiangshuying', 'dengchuhan', 'summer']
names = ['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
# names2 = copy.copy(names) #浅copy|相当于 nmes2=names.copy()
names2 = copy.deepcopy(names) # 深copy|一般不要轻易copy|文件很大时会造成空间浪费
print(names)
print(names2)
# names['dengchuhan']='邓楚涵' 错误的修改方法|必须用下标
names[3] = '邓楚涵'
print(names)
print(names2) # name2此时没有修改
names2[2][0] = 'Alex'
print(names)
print(names2) # 此时都修改了
----------
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], '邓楚涵', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], '邓楚涵', 'summer']
['xiaxiaofan', 'jiangshuying', ['Alex', 'jack'], 'dengchuhan', 'summer']
----------
列表循环
for i in names:
print(i)
步长切片
print(names)
print(names[0:-1:2])
元祖:只读列表
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
names = ('Alex', 'jack')
print(names.count('Alex'))
print(names.index('Alex'))
它只有2个方法,一个是count,一个是index,完毕。
购物车程序练习
1.启动程序后,让用户输入工资,然后打印商品列表
2.允许用户根据商品编号购买商品
3.用户选择商品后,检测余额是否够,如果够则直接扣款,不够提醒
4.可以随时退出,退出时,打印已购买商品和余额
字符串操作
特性:不可修改
字符串操作
name = 'xiaxiaofan'
print(name.capitalize()) # 首字母大写
print(name.count('x')) # 统计x出现次数
print(name.center(20, '-')) # 运行结果:-----xiaxiaofan-----
print(name.endswith('ex')) # 判断字符串以什么结尾
print(name.expandtabs(tabsize=10)) # 设置tab键\t的长度
# print(name.format()) #格式化字符串
# print(name.format_map()) #类似于foemat
print(name.isalnum()) # 字符串是不是由阿拉伯数字和字幕组成
print('aS123'.isalpha()) # 是否全部为英文
print(name.isdigit()) # 是否为数字
print('1A'.isidentifier()) # 判断是否是合法的变量名
print(name.istitle()) # 判断是否为title
print(name.isupper()) # 是否全部为大写
print('+'.join(['1', '2', '3'])) # 运行结果:1+2+3
print(name.ljust(20, '*')) # 运行结果:xiaxiaofan**********
print(name.rjust(20, '^')) # 运行结果:^^^^^^^^^^xiaxiaofan
print(name.lower()) # 大写变为小写
print(name.upper()) # 小写变为大写
print(name.strip()) # 去掉两头的空格和回车
p = str.maketrans('abcdef', '123456')
print('alex li'.translate(p)) # 把字符串转移成后面对应的值|执行结果:1l5x li
print(name.replace('x', 'X', 1)) # 将小写替换成大写
print('xiaxiaofan'.split('x')) # 用x分割字符串
print('1+2+3+4'.split('+')) # ['1', '2', '3', '4']
字典
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
语法:
info = {
'stu1101': "TengLan Wu",
'stu1102': "LongZe Luola",
'stu1103': "XiaoZe Maliya",
}
字典的特性:
dict是无序的
key必须是唯一的,so 天生去重
info = {
'stu1101': "TengLan Wu",
'stu1102': "LongZe Luola",
'stu1103': "XiaoZe Maliya",
}
print(info)
print(info['stu1101']) # 查找:取stu1101对应的value值
info['stu1101'] = '武藤兰' # 修改
print(info)
# info['stu1104'] #查找没有时,会报错
print(info.get('stu1104')) # 安全获取方法|没有时返回none
info.pop('stu1102') # 标准删除姿势
print(info)
# info.popitem() # 随机删除
# del info['stu1101']
# print(info)
字典的循环
(1)最推荐的循环方式
for i in info:
print(i, info[i])
(2)key-value循环
#有把字典转化成列表的过程,数据量大时转换列表会花费很长时间
for k, v in info.items():
print(k, v)
b = {
'stu1102': 'Alex',
1: 3,
2: 5
}
info.update(b) # 合并两个字典|有交叉的地方更新,没有的创建
print(info)
print(info.items()) #把字典转化成列表
c = info.fromkeys([6, 7, 8], [1, {'name': 'Alex'}, 444])
c[7][1]['name'] ='jack' #三个key共享一个内存地址
print(c)
作业:优化购物车
用户入口:
1.商品信息存在文件里
2.已购商品,余额记录
商家入口:
1.可以添加商品,修改商品价格