python中的数据类型与基本语法操作

Python3 中有六个标准的数据类型:

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

【0】数据类型脑图

  

 

 

 

【1】字符串

字符串不可以修改,直接修改操作其实是新赋值了一个字符串给它

【1.0】字符串函数

# Auth chaoqun.guo
name = "my name is alex"
print(name.capitalize()) # 首字母大写
print(name.count('a'))  # 统计出现的次数
print(name.center(50, '-'))  # 占50个字符宽度,且把 name 字符串对于这50个字符串的宽度居中,如果name字符串不足50,则用 '-' 填充
print(name.endswith("ex"))  # 判断字符串结尾的字符是不是 ex
print(name.expandtabs(tabsize=30)) # 把 \t 制表符换成30个字符大小
print(name.find("name"))  # 从左往右,获取字符串首字母的第一次出现的位置下标,方便切片
print(name.find("name"))  # 从左往右,获取字符串中最后一次出现 name 的首字母位置
print(name.format(name='alex',year=23))  #format函数,这里不特意讲了
print('ab23'.isalnum())        # 是否是一个 阿拉伯数字、字母,
print('abA'.isalpha())         # 是否是一个 纯字母字符串
print('1.22222'.isdecimal())   # 是否是一个 十进制
print('12'.isdigit())          # 是否是一个 证书
print('1a'.isidentifier())     # 是否是一个 合法的变量名(中文做变量名也是可以的哦)
print('aa'.islower())          # 是否是一个 小写字符串
print('aa'.isupper())          # 是否是一个 大写字符串
print('aa'.isspace())          # 是否是一个 空格
print('Aa Bb'.istitle())       # 是否是一个 标题,即每个单词首字母大写
print('hello world'.title())   # 把它变成一个 标题(即每个单词首字母大写),结果:Hello World
print('-'.join(['a', 'b', 'c'])) # 把列表、或者多个字符串合并成一个字符串,以 '-' 为合并分隔符每一个元素或字符  a-b-c
print('-'.join('aaaaaa'))        # 把列表、或者多个字符串合并成一个字符串,以 '-' 为合并分隔符每一个元素或字符  a-a-a-a-a-a
print('name'.ljust(5, '*'))      # 保证字符串长度为5,如果不够则左边补全 *,同理 rjust 是一样的效果
print(' aaa bbb '.strip())       # 去掉字符串左右两边的空格和换行,相当于 trim
print(' aaa bbb '.lstrip())      # 去掉字符串左边的空格和换行,相当于 ltrim ,同理 rstrip() 也是一样的效果

p = str.maketrans('abed', '1234')  # 构造字符映射规则,用后面的去替换映射前面的字符,要一一对应
print('aqwcc'.translate(p))        # 应用字符映射规则,结果:1qw33
print('aabc'.replace('a', 'A'))    # 替换a 为 A,如果只想替换 1个则可以 print('aabc'.replace('a', 'A',1))
print('1+2+3+4'.split('+'))        # 根据某个字符或字符串分割字符串,结果以列表存储:['1', '2', '3', '4']
print('1+2\n+3+4'.splitlines())    # 根据换行符 分割字符串,结果是列表:['1+2', '+3+4']
print('aAaA'.swapcase())           # 把字符串中字符大小写互换,结构:AaAa
print(' ni hao '.zfill(50))        # 0填充

【1.1】字符串:最佳实践

字符串或串(String)是由数字、字母、下划线组成的一串字符。

切片截取规则:

  

 

 实例:

  

 

 

     

 

 

     

【1.2】Bytes

python3,文本总是Unicode,由str组成;二进制则由 bytes类型表示;

python3 中不会以任何隐式的方式混用 str 和 bytes。

  不能拼接字符串和字符包,也无法再字节包里搜索字符串(反之亦然)

【1.3】Str 与 Bytes 互相转换

什么情况下,Str 需要转换成 Bytes呢?在python3中 做socket 编程的时候;

bytes 转 Str=》decode

Str 转 bytes=》encode

实践:

msg="我爱中国"
print(msg.encode('utf8'))  # 不写默认是utf-8 编码
print(msg.encode('utf8').decode(encoding='utf-8'))  # 不写默认是utf-8 编码

  

【2】列表 :使用 []

有序,可增删改查

【2.1】列表:基本使用命令

# Auth chaoqun.guo
name = ["张三","李四","王五"]
# 切片

print(name)
print(name[0])    # 获取第1个元素
print(name[0:3])  # 获取1-3下标的元素
print(name[-1])   # 获取最后一个下标的元素
print(name[::-1]) # 获取 所有倒序输出的元素
print(name[::2])  # 获取 从0开始命中之后,再步长为2的下标元素,结果是 name[0],name[2]

# 列表的 增删改查
name.append("赵6")   # 增:在列表最末尾追加元素
name.insert(1,"郭7") # 增:在指定下标位置添加元素,后续的会依次后推一个位置,一次只能插入一个
print(name * 4)      # 增: 所有元素乘以4倍,如[1,2] 变成[1,2,1,2,1,2,1,2]
# 浅copy,主要作用是建立联合账户,比如夫妻共用一张银行卡 name1 = name.copy() # 增: 复制一个新列表出来,且第一层原列表修改不影响新列表,第二层(比如嵌套列表,它存的只是一个指针)原列表被修改那么也会被修改;用copy.deepcopy(name) 解决 n1 = name[:] #浅copy 其他办法 n2 = list(name) #浅copy 其他写法
n3 = copy.copy(name) #浅copy 其他写法
name2
= copy.deepcopy(name) # 增:完全复制一个独立的新列表出来,需要import copy name3 = name # 增: 新建一个变量指针指向相同列表地址,原列表name修改,name3也会被修改 name[2]="我是周2啊" # 改:直接修改指定下标的值 name.reverse() # 改:元素下标倒序列表 name.sort() # 改:ASCII规则排序 name.sort(reverse=True) # 改:倒序 ASCII规则排序 name.remove("我是周2啊") # 删:删除 del name[1] # 删:删除 name.pop() # 删:默认删除最后一个,如果写下标1,那就和 del name[1] 一样了 print(name.index("张三")) # 查:查看元素的下标,如果有多个就只显示最前面第1个找到 print(name.count("张三")) # 查:查看元素在列表中的个数 print("张三" in name) # 查:查看元素是否在 列表中

【2.2】列表:实践演示

    

 

    

 

    

 

 

【3】数字

Python支持四种不同的数字类型:

  • int(有符号整型)
  • long(长整型[也可以代表八进制和十六进制])
  • float(浮点型)
  • complex(复数)

实例

  

 

 实践:

 

【4】元组:使用 ()

可以理解成不能修改的列表

  

【5.1】set集合:用 {}

# Auth chaoqun.guo
list_1 = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
list_1 = set(list_1)  # 把列表转换成集合,以此来去重
list_2 = set([1, 3, 5])

# 并交差集,子集,对称差集
print(list_1.intersection(list_2))  # 交集
print(list_1.union(list_2))         # 并集
print(list_1.difference(list_2))    # 差集,即在 list1中去掉所有与 list2 有交集的元素
print(list_1.issubset(list_2))      # 判断 list1 是否是 list2的子集,结果:False
print(list_1.issuperset(list_2))    # 判断 list1 是否是 list2的父集,结果:True
print(list_1.symmetric_difference(list_2))  # 对称差集,即取双方并集,但又减去双方交集
print(list_1.isdisjoint(list_2))            # 判断list1 与list2 是否没有交集,如果没有交集返回 True,有交集返回 False

# 符号表示
print(list_1 & list_2)  # intersection
print(list_1 | list_2)  # union
print(list_1 - list_2)  # difference
print(list_1 ^ list_2)  # symmetric_difference
print(list_1 <= list_2)  # issubset
print(list_1 >= list_2)  # issuperset

# 增删改查
list_1.add(999)            # 增加:增加元素
list_1.update([10,20,30])  # 增加:在list_1中添加多个元素
list_3 = list_1.copy()     # 增加:浅复制
list_1.remove(999)         # 删除:删除集合中的指定元素,如果指定元素不存在则会报错
list_1.pop()               # 删除:删除任意一个集合元素,如果输出该表达式,会输出被删除的值
list_1.discard('a')        # 删除:删除集合中的指定元素,如果不存在则为None
print(len(list_1))         # 查询:查看集合元素个数
print(10 in list_1)        # 查询:某个元素值 是否存在于集合
print(10 not in list_1)    # 查询:某个元素值 是否不存在于集合

 

  

【5.2】字典:用{key:value}

【5.2.1】基本操作

特性:无序,key 唯一

# Auth chaoqun.guo

info = {
    'stu1': "zhang san",
    'stu2': "li si ",
    'stu3': "wang wu"
}
# 增删改查

info["stu1"] = "张三"  # 增改:存在即修改,不存在则添加
del info["stu2"]      # 删除:key
info.pop("stu2")      # 删除:Key
info.popitem()        # 删除:任意删一个KV

print(info)            # 查询:获取所有的KV
print(info["stu2"])    # 查询:获取K 对应的V,如果不存在则报错
info.get("stu2")       # 查询:获取K 对应的V,如果不存在则输出 None
print("stu2" in info)  # 查询:判断K 是否在该字典中,如果存在则 True 否则 False
info.values()          # 查询:打印所有的 Value
info.keys()            # 查询:打印所有的 Key
info.setdefault("stu4", "zhao liu")  # 查询/新增:如果key 存在则查询,否则新建该key 然后查询该Key对应value

info = {'stu1': "zhang san",   'stu2': "li si ",   'stu3': "wang wu"}
info1 = {"stu1": "gg",    "stu4": "gg",    "stu5": "gg"}
info.update(info1)     # 修改:把info中的信息 修改成info1的,有交集的直接替换,没交集的则插入
info.items()           # 修改:把一个字典转换成列表,每一个KV键值对就是一个列表元素
print( dict.fromkeys([4, 5, 6], "test") )  # 初始化,初始化一个字典,默认值为"test" ,输出:{4: 'test', 5: 'test', 6: 'test'}
q = dict.fromkeys([4, 5, 6], ["aa", "bb", {"name": "gg"}])   # 多层初始化不要用,修改一个所有元素都会被修改
print(q)
q[6][2]["name"]= "aa"
print(q)   #  输出结果: {4: ['aa', 'bb', {'name': 'aa'}], 5: ['aa', 'bb', {'name': 'aa'}], 6: ['aa', 'bb', {'name': 'aa'}]}

#
嵌套 可以嵌套任意数据类型 info = { "一中": {"1班人数": 30, "2班人数": 20, "3班人数": 10}, "四中": {"1班人数": 15, "4班人数": 25, "7班人数": 33}, "六中": {"2班人数": 26, "5班人数": 32, "7班人数": 12}, } # 循环遍历字典 for i in info: # 该办法效率高很多 print(i, info[i]) for k, v in info.items(): print(k, v) 

【5.2.2】三级菜单案例

# 三级菜单
data = {
    '湖南省': {
        '长沙市': {
            '岳麓区': '我们这里有岳麓山啊',
            '芙蓉区': '我们这里有芙蓉广场啊'
            },
        '永州市': {
            '东安区': '我们这里有好吃的东安鸡啊',
            '祁阳县': '我们这里有好吃的炒血鸭啊'
            }
    },
        '广东省': {
            '深圳市': {
                '南山区': '我们这里有腾讯啊',
                '龙岗区': '我们这里有华为啊'
            },
            '广州市': {
                '天河区': '我说我这里有广州塔,你信吗?',
                '白云区': '我们这里有4399游戏公司,你信吗?'
            }

    }

}
exit_flag = False
while not exit_flag:
    for i in data:
        print('1', i)
    choice = input("选择进入省>>(b返回,q退出):")
    if choice in data:
        while not exit_flag:
            for i2 in data[choice]:
                print("\t2.",i2)
            choice2 = input("选择进入市>>(b返回,q退出):")
            if choice2 in data[choice]:
                while not exit_flag:
                    for i3 in data[choice][choice2]:
                        print("\t\t3.", i3)
                    choice3 = input("选择进入区(b返回,q退出)>>:")
                    if choice3 in data[choice][choice2]:
                        print(data[choice][choice2][choice3])
                    elif choice3 == 'b':
                        break
                    elif choice3 == 'q':
                        exit_flag = True
                    else:
                        print("您输入的名称不存在,请查看列表重新输入~~")

            elif choice2 == 'b':
                break
            elif choice2 == 'q':
                exit_flag = True
            else:
                print("您输入的名称不存在,请查看列表重新输入~~")
    elif choice == 'b':
        break
    elif choice == 'q':
        exit_flag = True
    else:
        print("您输入的名称不存在,请查看列表重新输入~~")

 

结果:

  

 

【5.2.3】基本概念

   

 

 

 

【6】python中的常用操作

【6.1】python中的多行语句

使用\,()、[]、{} 也可以达到这个效果

  

 

【6.2】python中的注释

### python中的注释
单行注释 #
多行注释
(1)''' 内容 '''
(2) """ 内容 """

# 第一个注释
print ("Hello, Python!")  # 第二个注释
'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''

"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""

 

【6.3】print输出,不换行输出

  

 

【6.4】设置字符编码

### 字符编码
1. # coding: UTF-8

【6.5】导入库 import

import 与 from...import

在 python 用 import 或者 from...import 来导入相应的模块。

将整个模块(somemodule)导入,格式为: import somemodule

从某个模块中导入某个函数,格式为: from somemodule import somefunction

从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

将某个模块中的全部函数导入,格式为: from somemodule import *

 

关于 import 的小结,以 time 模块为例:

1、将整个模块导入,例如:import time,在引用时格式为:time.sleep(1)。

2、将整个模块中全部函数导入,例如:from time import *,在引用时格式为:sleep(1)。

3、将模块中特定函数导入,例如:from time import sleep,在引用时格式为:sleep(1)。

4、将模块换个别名,例如:import time as abc,在引用时格式为:abc.sleep(1)。

 

【6.6】类型转换

当字符串内容为浮点型要转换为整型时,无法直接用 int() 转换:

a='2.1'  # 这是一个字符串
print(int(a))

会报错 "invalid literal for int() "

需要把字符串先转化成 float 型再转换成 int 型:

a='2.1'
print(int(float(a)))

【6.7】format

(1)不写参数,用位置对应

a='gg'
b=25
print('my name is {},I am {} years old'.format(a,b))

my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的

  

写参数,赋值对应

username='a'
password='b'
info=''' info of {name}
--username:{name}
--password: {pwd}
'''.format(name=username,pwd=password)
print(info)

  

【6.8】格式化赋值

username='a'
password='b'
info='''
--username:%s
--password: %s
''' %(username,password)

  

【6.9】三元运算赋值(result = a if a>b else c)

a,b,c = 1,3,5
result = a if a>b else c
print(result)

结果: 5

【6.10】设置文件编码格式 

三种方式:

1.# -*- coding: <encoding name> -*- : # -*- coding: utf-8 -*-
2.# coding=<encoding name>  : # coding=utf-8
3.# coding:<encoding name> : # coding: utf-8

【6.11】生成器( b = [i*2 for i in range(10)] )

【6.12】字符串不转义,在字符串前面加 r

print(r'abc \n eee\taaa')
abc \n eee\taaa

【6.13】输入值,多个值输入

a,b,c = input("请输入三角形三边的长:").split()    # 默认空格做多个值分隔

#同时如果想要使用逗号(,)隔开,则可以使用input().split(’,’)

 

 

【总结】

(1)字符串、数字不可以修改 

  如下,我们可以看到,虽然赋值成功了,但是已经不是同一个ID值了,变量其实是一个指针,指向了这个内存中生成的固定字符串而已

    

  然后,我们的不可更改就如下面

    

 

 

(2)列表可以增删改查

  如下图,演示了增删操作;还有appen 可以在末尾追加

    

 

(3)元组 tuple 是只读的

posted @ 2020-07-07 00:23  郭大侠1  阅读(477)  评论(0编辑  收藏  举报