Python基础之列表、元组、字典、集合的使用
一、列表
1、列表定义
names=["Jhon","Lucy","Michel","Tom","Wiliam"]
列表切片:
names=["HeXin","ZhangLiang",["caijie","LiSi"],"LiYun","TianJun",'GuYun']
print(names)
print(names[0])
print(names[1:3]) #不能取到索引为3的列表元素
print(names[-1])#取列表的倒数第一位的值
print(names[-2:]) #取倒数两个值
print(names[0:3])
print(names[:3]) #与print(names[0:3]) 等价 print(names.index("GuYun")) # 打印输出索引值
print(names[names.index("GuYun")])
print(names.count("LiYun")) #打印输出列表中"LiYun"的个数
结果:
['HeXin', 'ZhangLiang', ['caijie', 'LiSi'], 'LiYun', 'TianJun', 'GuYun', 'LiYun']
HeXin
['ZhangLiang', ['caijie', 'LiSi']]
LiYun
['GuYun', 'LiYun']
['HeXin', 'ZhangLiang', ['caijie', 'LiSi']]
['HeXin', 'ZhangLiang', ['caijie', 'LiSi']]
5
GuYun
2
2、列表元素的追加与删除
names=["HeXin","ZhangLiang",["caijie","LiSi"],"LiYun","TianJun",'GuYun',"LiYun"]
print(names)
#列表追加:
names.append("李斯") #默认插入到列尾
names.insert(1,"唐宇") #指定位置插入
names[2]="肖静" #指定位置插入
print("-----after append-----\n",names)
#列表删除:
names.remove("LiYun")
del names[1] #删除列表中索引为1的值
names.pop()#默认删除最后一个值
names.pop(0)#删除第一个值
print("-----after delete-----\n",names)
运行结果:
['HeXin', 'ZhangLiang', ['caijie', 'LiSi'], 'LiYun', 'TianJun', 'GuYun', 'LiYun']
-----after append-----
['HeXin', '唐宇', '肖静', ['caijie', 'LiSi'], 'LiYun', 'TianJun', 'GuYun', 'LiYun', '李斯']
-----after delete-----
['肖静', ['caijie', 'LiSi'], 'TianJun', 'GuYun', 'LiYun']
删除整个列表:del names
反转列表值的位置:name.reverse()
排序:names.sort()
3、列表复制
语句:import copy
列表扩展:
names=["HeXin","ZhangLiang",["caijie","LiSi"],"LiYun","TianJun",'GuYun',"LiYun"]
print(names) names2=[1,2,3,4]
names.extend(names2) #将names2的值添加到names中
print(names,names2)
运行结果:
['HeXin', 'ZhangLiang', ['caijie', 'LiSi'], 'LiYun', 'TianJun', 'GuYun', 'LiYun']
['HeXin', 'ZhangLiang', ['caijie', 'LiSi'], 'LiYun', 'TianJun', 'GuYun', 'LiYun', 1, 2, 3, 4] [1, 2, 3, 4]
列表复制与变量复制略有不同:
import copy
#变量的复制:
name1="LiHai"
name2=name1
name1="TianJun"
print("-----name1>>",name1)
print("-----name2>>",name2) #列表的复制:
names=['1','2','3']
names2=names.copy() #浅copy
names[0] = 55
print("-----names>>",names)
print("-----names2>>",names2) names3=[1,2,[5,7],3]
print("-----修改前的names3>>",names3)
names4=copy.copy(names3) #浅copy
names5=copy.deepcopy(names3) #深copy
names3[2][0]=66
names3[0]=88
print("-----names3>>",names3)
print("-----names4>>",names4)
print("-----names5>>",names5)
结果:
-----name1>> TianJun
-----name2>> LiHai
-----names>> [55, '2', '3']
-----names2>> ['1', '2', '3']
-----修改前的names3>> [1, 2, [5, 7], 3]
-----names3>> [88, 2, [66, 7], 3]
-----names4>> [1, 2, [66, 7], 3]
-----names5>> [1, 2, [5, 7], 3]
变量name2被赋值之后不会随name1的改变而改变,列表mames5在深copy的条件下,其结果与变量的复制效果一样,并没有随names3的改变而改变;而列表names4通过浅copy后,其最外层不会随names3的改变而改变,但内层会随names3的改变而改变。
4、利用for循环打印列表names
names=["HeXin","ZhangLiang",["caijie","LiSi"],"LiYun","TianJun",'GuYun',"LiYun"]
for i in names:
print(i)
结果:
HeXin
ZhangLiang
['caijie', 'LiSi']
LiYun
TianJun
GuYun
LiYun
5、不用for循环打印列表
names=["HeXin","ZhangLiang",["caijie","LiSi"],"LiYun","TianJun",'GuYun',"LiYun"]
print(names[0:-1:2]) #打印列表中索引值为0到-1的值,步长为2
print(names[::1]) #打印列表中所有值
结果:
['HeXin', ['caijie', 'LiSi'], 'TianJun']
['HeXin', 'ZhangLiang', ['caijie', 'LiSi'], 'LiYun', 'TianJun', 'GuYun', 'LiYun']
注意:列表打印属于“顾头不顾尾”,如print(names[0:2]) ,结果只能输出列表的前两个值。
利用列表书写购物车程序:
(1)启动程序后,让用户输入工资,然后打印商品列表;
(2)用户输入相应的商品编号购买商品
(3)用户输入商品编号后,系统检测余额是否足够,足够则直接扣款,不够则提示
(4)可随时退出购物,并打印已购商品和余额
shopping_list=[]
product_list=[
['iphone',5800],
['mac pro',9800],
['bike',800],
['watch',10600],
['coffee',31]
] salary=input('input your salary:')
if salary.isdigit():
salary=int(salary)
while True:
for index, item in enumerate(product_list):#enumerate:读取列表的索引
#print(product_list.index(item),item) 等价于上一句话
print(index,item)
user_choice=input('选择要买什么?')
if user_choice.isdigit():#如果输入的是数字
user_choice=int(user_choice)#将字符窜转换为整型
if user_choice <len(product_list) and user_choice>=0:#如果用户输入的数字在user_choice列表的长度范围之内
p_item=product_list[user_choice]#product_list列表中商品价格赋值给p_item
if p_item[1] <= salary:
shopping_list.append(p_item)
salary-=p_item[1]
print('Added %s into shopping cart,your current banlance is \033[31;1m%s\033[0m'%(p_item,salary))
else:
print('\033[41;1m你的余额只剩[%s]啦\033[0m'% salary)
else:
print('product code[%s] is not exist'% user_choice)
elif user_choice=='q':
print('....shopping list....')
for p in shopping_list:
print(p)
print('your current balance:',salary)
exit()
else:
print('Invalid option')
二、元组
元组一旦创建不能修改,所以又叫只读列表。
元组只有两个方法:count和index
元组定义:names=('Jim','Lucy')
三、字典
字典是一种Key-value的数据类型,是无序的。
1、字典相关操作
#字典定义 :
info={'stu001':'Lily',
'stu002':'Jack',
'stu003':'John',
}
print(info)
print(info['stu002']) #打印输出stu002的值
info["stu002"]="张三" #修改值
info["stu004"]="HeQian" #新增
#del info #删除字典info
del info["stu001"] #删除指定值
print("操作后的字典>>>",info) b={
'stu001':"yanlin",
1:3,
2:5}
info.update(b)#更新字典
print("更新后的字典>>>",info) c=info.fromkeys([6,7,8],"test")#初始化新字典,并给每个key赋值test
print("初始化后的字典>>>",c)
print(info.items())#字典转成列表 c=dict.fromkeys([6,7,8],[1,{"name":"Micle"},234])#初始化新字典,三个key将共享一个值
print(c)
c[7][1]['name']="Cherry"#修改字典值
print(c) print("--------字典循环 ------")
for i in info:
print(i,info[i])#推介使用此方法循环
print("---------") for k,v in info.items():
print(k,v)
结果:
{'stu003': 'John', 'stu002': 'Jack', 'stu001': 'Lily'}
Jack
操作后的字典>>> {'stu003': 'John', 'stu002': '张三', 'stu004': 'HeQian'}
更新后的字典>>> {1: 3, 'stu002': '张三', 'stu001': 'yanlin', 'stu004': 'HeQian', 'stu003': 'John', 2: 5}
初始化后的字典>>> {8: 'test', 6: 'test', 7: 'test'}
dict_items([(1, 3), ('stu002', '张三'), ('stu001', 'yanlin'), ('stu004', 'HeQian'), ('stu003', 'John'), (2, 5)])
{8: [1, {'name': 'Micle'}, 234], 6: [1, {'name': 'Micle'}, 234], 7: [1, {'name': 'Micle'}, 234]}
{8: [1, {'name': 'Cherry'}, 234], 6: [1, {'name': 'Cherry'}, 234], 7: [1, {'name': 'Cherry'}, 234]}
--------字典循环 ------
1 3
stu002 张三
stu001 yanlin
stu004 HeQian
stu003 John
2 5
---------
1 3
stu002 张三
stu001 yanlin
stu004 HeQian
stu003 John
2 5
2、字典嵌套
av_catalog = {
    "欧美":{
        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
        "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
    },
    "日韩":{
        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
    },
    "大陆":{
        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    }
}
av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"#修改内容
print(av_catalog["大陆"]["1024"]) #打印输出被修改的内容
av_catalog.setdefault("taiwan",{"www.baidu.com":[1,2]}) #新增字典元素
print(av_catalog)
av_catalog.setdefault("大陆",{"www.baidu.com":[1,2]})
print(av_catalog)
结果:
['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']
{'日韩': {'tokyo-hot': ['质量怎样不清楚,个人已经不喜欢日韩范了', '听说是收费的']}, '大陆': {'1024': ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']}, 'taiwan': {'www.baidu.com': [1, 2]}, '欧美': {'www.youporn.com': ['很多免费的,世界最大的', '质量一般'], 'letmedothistoyou.com': ['多是自拍,高质量图片很多', '资源不多,更新慢'], 'x-art.com': ['质量很高,真的很高', '全部收费,屌比请绕过'], 'www.pornhub.com': ['很多免费的,也很大', '质量比yourporn高点']}}
{'日韩': {'tokyo-hot': ['质量怎样不清楚,个人已经不喜欢日韩范了', '听说是收费的']}, '大陆': {'1024': ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']}, 'taiwan': {'www.baidu.com': [1, 2]}, '欧美': {'www.youporn.com': ['很多免费的,世界最大的', '质量一般'], 'letmedothistoyou.com': ['多是自拍,高质量图片很多', '资源不多,更新慢'], 'x-art.com': ['质量很高,真的很高', '全部收费,屌比请绕过'], 'www.pornhub.com': ['很多免费的,也很大', '质量比yourporn高点']}}
3、三级菜单的实现
data = {
    "北京":{
        "朝阳":{
            "yi":['炸鸡','汉堡','03'],
            "er":['可乐','雪碧']
        },
        "昌平":{
            "san":['06','益达','023'],
            "si":['米饭','玉米']
        },
    },
    "四川":{
        "成都": {
            "双流": ['肥肠粉', '麻辣烫'],
            "新都": ['烧烤', '卤鸡脚']
        },
        "绵阳": {
            "wu": ['啤酒', '香槟', '鸭脖'],
            "liu": ['柠檬', '橘子']
        },
    },
    "安徽":{
        "合肥": {
            "qi": ['011', '042', '063'],
            "ba": ['104', '105']
        },
        "黄山": {
            "jiu": ['066', '07', '033'],
            "shi": ['304', '025']
        }
    }
}
ch1=False
while  not ch1:
    for i in data:
        print(i)
    choice1=input('>>>:')
    if choice1 in data:
        while not ch1:
            for i2 in data[choice1]:
                print("\t",i2)
            choice2 = input('>>>:')
            if choice2 in data[choice1]:
                while not ch1:
                    for i3 in data[choice1][choice2]:
                        print("\t\t",i3)
                    choice3 = input('>>>:')
                    if choice3 in data[choice1][choice2]:
                            for i4 in data[choice1][choice2][choice3]:
                                print("\t\t\t", i4)
                            choice4=input('已经是最后一层,按b返回到上一级>>>:')
                            if choice4=="b":
                                pass
                            elif choice4=="q":
                                ch1=True
                    if choice3 == "b":
                        break
                    elif choice3 == "q":
                        ch1 = True
            if choice2 == "b":
                break
            elif choice2 == "q":
                ch1 = True
四、集合
集合是一个无序的、不重复的数据组合。
list1=[1,4,5,6,3,5,3,6] #定义一个列表
list1=set(list1) #变成集合,去重
list2=set([3,5,33,67,8,6])
list3=set([3,5,6])
list4=set([4,2])
print(list1,type(list1)) print(list1.intersection(list2))#取两个集合的交集
print(list1.union(list2))#取并集
print(list1.difference(list2))#取差集,即在list1中有的,在list2中没有的
print(list1.issubset(list2))#子集
print(list1.issuperset(list2))
print(list3.issubset(list1))#list3是list1的子集
print(list1.symmetric_difference(list2))#对称差集,即取双方互相没有的值
print("----------") print(list2.isdisjoint(list4))#判断是否有交集
print(list1 & list2)#交集
print(list2 | list1)#并集
print(list1 - list2)#差集
print(list1 ^ list2)#对称差集 list4.add(78)#添加一个值
list4.update([00,22])#添加多个值
list4.remove(2)#删除
print(list4)
print(list1.pop())#删除任意一个值,并返回删除的值
print(list2.discard("34"))#删除指定值,若不存在该值,系统不会报错,有别于remove
运行结果:
{1, 3, 4, 5, 6} <class 'set'>
{3, 5, 6}
{1, 33, 3, 4, 5, 6, 67, 8}
{1, 4}
False
False
True
{33, 1, 67, 4, 8}
----------
True
{3, 5, 6}
{33, 1, 67, 3, 5, 6, 4, 8}
{1, 4}
{33, 1, 67, 4, 8}
{0, 4, 78, 22}
1
None
Python基础之列表、元组、字典、集合的使用的更多相关文章
- python的学习笔记01_4基础数据类型列表 元组 字典 集合  其他其他(for,enumerate,range)
		
列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 特性: 1.可存放多个值 2.可修改指定索引位置对应的值,可变 3.按照从左到右的顺序定义列表元素,下标从0开始顺序访问 ...
 - Python入门基础学习(列表/元组/字典/集合)
		
Python基础学习笔记(二) 列表list---[ ](打了激素的数组,可以放入混合类型) list1 = [1,2,'请多指教',0.5] 公共的功能: len(list1) #/获取元素 lis ...
 - Python 基础-python-列表-元组-字典-集合
		
列表格式:name = []name = [name1, name2, name3, name4, name5] #针对列表的操作 name.index("name1")#查询指定 ...
 - python中列表 元组 字典 集合的区别
		
列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...
 - **python中列表 元组 字典 集合
		
列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. 1.列表 列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔. 列表的特 ...
 - python3笔记十八:python列表元组字典集合文件操作
		
一:学习内容 列表元组字典集合文件操作 二:列表元组字典集合文件操作 代码: import pickle #数据持久性模块 #封装的方法def OptionData(data,path): # ...
 - python_列表——元组——字典——集合
		
列表——元组——字典——集合: 列表: # 一:基本使用# 1.用途:存放多个值 # 定义方式:[]内以逗号为分隔多个元素,列表内元素无类型限制# l=['a','b','c'] #l=list([' ...
 - Day2 - Python基础2 列表、字典、集合
		
Python之路,Day2 - Python基础2 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一, ...
 - Python  列表&元组&字典&集合
		
列表(list) 有序性,可存储任意类型的值 通过偏移存取,支持索引来读取元素,第一个索引为0 ,倒数第一个索引为-1 可变性 ,支持切片.合并.删除等操作 可通过索引来向指定位置插入元素 可通过po ...
 - python 中列表 元组 字典 集合的区别
		
先看图片解释 (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单.由于我们买一种东西可能不止一次,所以清单中是允许有重复 ...
 
随机推荐
- 关于新手html的认识 以及对table的基本用法
			
1.html语言 <!DOCTYPE html> 声明html <!--双标签--> <!--<html 属性名="属性值 " 属性名2=&qu ...
 - Golang 在 Linux CentOS 6.5 服务器上实现 博客后台程序开机启动
			
在linux下想实现开机启动的方法很多,这里我采用了在/etc/rc.local里写shell指令的方式. 以下就以我的实际操作为例子讲述,很多地方需要看官自己调整信息哦! 1.在/etc/rc.lo ...
 - _bzoj1500 [NOI2005]维修数列【真·Splay】
			
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1500 注意MAX-SUM的时候,不可以是空串. #include <cstdio> ...
 - OC中protocol、category和继承的关系--转
			
开放封闭原则(OCP)就是,“对扩展开放,对更改封闭”.是所有面向对象设计的一个核心宗旨.感兴趣的可以看百度百科的一些解释:http://baike.baidu.com/view/2493421.ht ...
 - CROSS APPLY AND CROSS APPLY
			
随着业务千奇百怪,DBA数据库设计各有不同,一对多关系存JSON或字符串逗号分隔... 今天小编给大家分享一下针对这个问题的解决办法 问题一.存储过程接受参数格式为XXX,XXX 解决办法:将字符转成 ...
 - ibatis 的sqlMap 的xml 关注点
			
1.当有特殊字符时候需要保持原状 eg:特殊字符 <> 错误:t.name<>' ' 会报The content of elements must consist of ...
 - IntentFilter的相关问题解析
			
IntentFilter是配合Intent而生的,你有目标行动或者结果,那么那些行动和结果就会有他完成的特定要求,这些要求就是IntentFilter,可以理解为Intent和IntentFilter ...
 - 程序员的职业方向: 是-->技术?还是-->管理?
			
岁之后还能不能再做程序员....... 绝大多数程序员最终的职业目标可能都是CTO,但能做到CEO的人估计会比较少,也有一少部分人自己去创业去当老板,也有部分人转行了,当老板的人毕竟是少数,转行的人都 ...
 - iOS - - JSON 和 XML解析
			
JSON 和 XML 一.JSON 1.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) 2.JSON的格 ...
 - 字符串(String)几个常用方法的详解
			
String:(字符串) indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. stringObject.indexOf(searchvalue,fromindex) searc ...