#!/usr/bin/env/python
# -*- coding:utf-8 -*-

# 一、列表:list
#1、 原值最后追加:append()
# li = [11, 22, 33, 44, 55, 66]
# li.append(77)
# li.append('alex')
# li.append([77, 88])
# append()只能添加一项数据
# print(li)

# 2、清空列表:clear()
# li = [11, 22, 33, 44, 55, 66]
# li.clear()
# print(li)

# 3、拷贝(浅拷贝):copy()
# li = [11, 22, 33, 44, 55, 66]
# v = li.copy()
# print(v)

# 4、计算元素出现的次数:count()
# li = [11, 22, 33, 44, 55, 66, 11, 11]
# v = li.count(11)
# print(v)

# 5、扩展原列表,要求参数为可迭代对象:extend()
# li = [11, 22, 33, 44, 55, 66]
# # li.append([77,88,'不得了'])
# # print(li)
# # li.extend([77,88,'不得了'])
# # print(li)
# # for i in [77,88,'不得了']:
# #     li.append(i)
# # print(li)
# li.extend('不得了')
# print(li)

# 6、根据值获取当前值索引位置(左边优先)
# li = [11, 22, 33, 44, 55, 66]
# v = li.index(33)
# print(v)

# 7、在指定索引位置插入元素
# li = [11, 22, 33, 44, 55, 66]
# li.insert(3,99)
# print(li)

# # 8、删除某个值(1.指定索引;2.默认为最后一个值),并获取删除的值
# li = [11, 22, 33, 44, 55, 66]
# # v = li.pop()
# # print(v)
# # print(li)
#
# v = li.pop(2)
# print(v)
# print(li)

# # 9、删除列表中的指定值,左边优先
# li = [11, 22, 55, 33, 44, 55, 66]
# li.remove(55)
# print(li)
#
# PS:删除功能的算法:pop,remove,del li[0],del li[7:9],clear

# 10、将当前列表进行翻转
# li = [11, 22, 33, 44, 55, 66]
# li.reverse()
# print(li)

# 11、列表的排序
# li = [22, 44, 11, 33, 66, 55]
# # li.sort()
# li.sort(reverse = True)
# print(li)

# 12、索引取值
# li = [22, 44, 11, 33, 66, 55]
# print(li[3])

# 13、切片,切片结果也是列表
# li = [22, 44, 11, 33, 66, 55]
# # print(li[1:4])
# print(li[1:-1])

# 14、for循环,while循环
# li = [22, 44, 11, 33, 66, 55]
# for item in li:
#     print(item)

# 15、列表元素可以被修改
# li = [22, 44, 11, 33, 66, 55]
# # li[1] = 99
# li[1] = [11, 22, 33, 44]
# print(li)

# 16、列表元素删除操作
# li = [22, 44, 11, 33, 66, 55]
# # del li[1]
# # li[1:3] = [11,44,55]
# del li[1:3]
# print(li)

# 17、in 操作
# li = [1, 12, 9, "age", [ "是真问",["19", 81], "庞麦郎"], "alex", True]
# # v = "是真问" in li
# # v = "是真问" in li[4]
# # v = 'age' in li
# print('age' in li)

# 18、索引操作
# li = [1, 12, 9, "age", [ "是真问",["19", 81], "庞麦郎"], "alex", True]
# # print(li[4][1][0])
# print(li[4])

# 19、list操作,字符串转换列表,内部使用for循环
# # s = "lkasdjhlaifhuoijlkoqkj"
# # v = list(s)
# i = 123
# v = str(i)
# print(v)

# 20、列表转换成字符串
# 自己使用for循环一个一个处理,要求只包含数字和字符串:
# li = [11, 22, 33, "123", "alex"]
# # r = str(li)
# # print(r)
# s = ""
# for i in li:
#     s += str(i)
# # print(s)
# # 直接使用字符串join方法:要求列表中的元素只有字符串
# li = ["123", "alex"]
# v = "".join(li)
# print(v)

# 21、字符串创建后不可修改
# v = "alex"
# # new_v = v.replace('l','eee')
# # print(v,new_v)
# print(v)

# 22、列表有序,元素可以被修改
# li = [11, 22, 33, 44]
# # li[0] = 55
# li[1] = "alex"
# print(li)

# 二、元组:tuple
#1、元组,元素不可被修改、增加或删除

# # 2、获取指定元素在元组中出现的次数
# tu = (11,22,33,44,22,22)
# # v = tu.count(22)
# print(v)
#
# 3、获取指定元素在元组中的索引号,左边优先
# tu = (11,22,33,44,22,22)
# v = tu.index(22)
# print(v)

# 4、书写格式:(一般在写元组的时候推荐在最后加入“,”)
# 元素不可被修改、增加或删除
# tu = (111, "alex", (11, 22),[(33, 44), 55], True, 33, 44,)

# 5、支持索引
# tu = (111, "alex", (11, 22),[(33, 44), 55], True, 33, 44,)
# v = tu[4]
# print(v)

# 6、切片
# tu = (111, "alex", (11, 22),[(33, 44), 55], True, 33, 44,)
# v = tu[0:3]
# print(v)

# 7、可以被for循环,是可迭代对象
# tu = (111, "alex", (11, 22),[(33, 44), 55], True, 33, 44,)
# for item in tu:
#     print(item)

# 8、转换
s = "djhksadhjais8"
li = ["asdsa", "fsdd", 8]
tu = ("asdsds", "asdfsfs")
# v = tuple(s)
# # print(v)
# v = tuple(li)
# print(v)
# v = list(tu)
# print(v)
# v = "".join(tu)
# print(v)

# 9、扩展
# tu = ("asdsds", "asdfsfs")
# li.extend((11, 22, 33,))
# print(li)

# 10、元组的一级元素不可修改/删除/增加
# tu = (111, "alex", (11, 22),[(33, 44), 55], True, 33, 44,)
# tu[3][0] = 22
# print(tu)

# 三、字典
# 1、样式
# dic = {
#     "k1":'v1',#键值对
#     "k2":'v2'
# }

# 2、根据序列创建字典,并指定统一的值
# v = dict.fromkeys(["k1", 123, "999", (232, "asdd")], 123)
# print(v)

# 3、根据key值获取值,当key不存在时报错
# dic = {
#     "k1":'v1',
#     "k2":'v2'
# }
# v = dic["k1"]
#
# 4、根据key值取值,当key不存在时,可指定返回默认值(None)
# dic = {
#     "k1":'v1',
#     "k2":'v2'
# }
# v = dic.get('k111'111)
# print(v)

# 5、删除指定键值对并获取值
# dic = {
#     "k1":'v1',
#     "k2":'v2'
# }
# v = dic.pop('k1',90)
# print(dic,v)

# 6、随机删除一个键值对并获取删除的元素
# dic = {
#     "k1":'v1',
#     "k2":'v2'
# }
# k,v = dic.popitem()
# print(dic,k,v)

# 7、设置值,
# 已存在:不设置,获取原有key以对应的值
# 不存在:设置,获取当前key对应的值
# dic = {
#     "k1":'v1',
#     "k2":'v2'
# }
# v = dic.setdefault('k111','123')
# print(dic,v)

# 8、更新
# dic = {
#     "k1":'v1',
#     "k2":'v2'
# }
# # dic.update({'k1':'13232','k3':1233})
# dic.update(k1 = 321,k3 = '321',k5 = 'ads')
# print(dic)

# 9、字典的value可以是任何值
# info = {
#     "k1":123,
#     "k2":True,
#     "k3":[
#         11,
#         [12,"123"],
#         (21,"sd"),
#         22,
#         33,
#         {
#             'kk1':'vv1',
#             'kk2':'vv2',
#             'kk3':'vv3',
#         }
#     ],
#     "k4":(11,22,33,44,'55')
# }
# print(info)

# 10、列表、字典不能作为字典的key
# info = {
#     2:'asds',
#     "k1":'asdsad',
#     True:"1232",
#     # [11,22]:123,
#     (11,22):123,
#     # {'k1':'v1'}:132
# }
# print(info)

# 11、字典无序
# info = {
#     "k1":123,
#     "k2":True,
#     "k3":[
#         11,
#         [12,"123"],
#         (21,"sd"),
#         22,
#         33,
#         {
#             'kk1':'vv1',
#             'kk2':'vv2',
#             'kk3':'vv3',
#         }
#     ],
#     "k4":(11,22,33,44,'55')
# }
# print(info)

# 12、支持索引方式找到指定值
# info = {
#     "k1":123,
#     2:True,
#     "k3":[
#         11,
#         [12,"123"],
#         (21,"sd"),
#         22,
#         33,
#         {
#             'kk1':'vv1',
#             'kk2':'vv2',
#             'kk3':'vv3',
#         }
#     ],
#     "k4":(11,22,33,44,'55')
# }
# # v = info['k1']
# # v = info[2]
# v = info['k3'][5]['kk1']
# print(v)

# 13、字典支持del删除
# info = {
#     "k1":123,
#     "k2":True,
#     "k3":[
#         11,
#         [12,"123"],
#         (21,"sd"),
#         22,
#         33,
#         {
#             'kk1':'vv1',
#             'kk2':'vv2',
#             'kk3':'vv3',
#         }
#     ],
#     "k4":(11,22,33,44,'55')
# }
# # del info['k3']
# del info['k3'][5]['kk2']
# print(info)

# 14、for循环
# info = {
#     "k1":123,
#     "k2":True,
#     "k3":[
#         11,
#         [12,"123"],
#         (21,"sd"),
#         22,
#         33,
#         {
#             'kk1':'vv1',
#             'kk2':'vv2',
#             'kk3':'vv3',
#         }
#     ],
#     "k4":(11,22,33,44,'55')
# }
# for item in info:
#     print(item)
# for item in info.keys():
#     print(item)
# for item in info.values():
#     print(item)
# for item in info.keys():
#     print(item,info[item])
# for k,v in info.items():
#     print(k,v)

# 重点掌握以下内容
# 一、数字
# int(..)

# 二、字符串
# replace/find/join/strip/startwith/split/upper/lower/format
# template = "i am {name},age:{age}"
# # v = template.format(name = 'alxe',age = 19)
# v = template.format(**{'name':'alxe','age':19})
# print(v)

# 三、列表
# append/extend/insert
# 索引、切片、循环

# 四、元组
# 索引、切片、循环、一级元素不能被修改

# 五、字典
# get/update/keys/values/items
# for,索引
# dic = {
#     "k1":"v1",
# }
# # v = "k2" in dic
# v = "v1" in dic.values()
# print(v)

# 六、布尔值
# 0 1
# bool(...)
# None "" () [] {} 0 ==>False