No.002-Python-学习之路-Day2-num|String|Bytes|List|tuple|dict|集合的推导式

Data Type

number:

  intger:

  32位机器上为 -2**31 - 2**31

  64位机器上为-2**63 - 2**63

  在python 2 中年当字符串超了后,会自动变成long intger

  在python 3 中没有相关的机制,无论intger多大均为int类型

  16进制表示方法:0X53 或者 53BH

  float:

  表示方法:

      方法一:普通表示法-0.002341

      方法二:科学计数法-52.3E-4

  Boolean

   True or False  0 or 1

  

if True:
    print("Boolean value is True")
a = 0
if a:
    print("Boolean value is True")

String

  1.字符串是可以拼接的

  2.字符串是不支持修改的,比如a[1]值可以取出,但是a[1] = "A"是不行的,所以,字符串在修改的时候,事实上是直接做了替换;

name = "boy's name is Bruce"

#显示字符串中有多少个某字母
print(name.count("a"))
#将字符串的首字符大写()
print('alex li'.capitalize())
print('alex li'.title())# 把word首字符变为大写

#字符串居中,左对齐,右对齐,并不足50这个长度,用-
print(name.center(50, "-"))
print(name.ljust(50, '-'))
print(name.rjust(50, '-'))
print('lex li'.zfill(50)) #不够的用零填充

#string encode bytes
print(name.encode())
#判断string是不是以某结尾
print(name.endswith("ce"))

name = "boy's \t name is Bruce"
#定义字符串中tab键的长度
print(name.expandtabs(tabsize=30))
#从下标1开始自左向右查找字符串,找到返回起始下标,未找到返回-1
print(name.find("name", 1)) # 用于切片,字符串也可以切片
print('alex li'.rfind('l')) # 找到最右边一个l,然后按照从左往右写编号

#经常用的format,用于将字符串中{}更换为相应的变量值
format_name = "Bruce"
format_age = 18
name = "name is {name},Age is {age}"
print(name.format(name=format_name, age=format_age))
#format_map仅可以用dict格式
print(name.format_map({'name': 'bruce', 'age': 12}))
#自左向右查某个字符的编号,区别于find()的是,如果没有某字符会报错
print(name.index('a'))

#is相关方法
print('abc23'.isalnum()) #包含英文字符及1-9 - 为true 如果包含特殊字符则为false
print('abc'.isalpha()) #纯英文字符
print('1.00'.isdecimal()) #十进制,比如16进制
print('12'.isdigit()) # 是否为整数
print('1A'.isidentifier()) # 判断是不是一个合法的标识符(是不是一个合法的变量名)
print('1a'.islower()) # 是否为小写
print('33.33'.isnumeric()) #是不是只有数字在里面,相似于isdigit
print(' '.isspace()) # 是不是一个空格
print('My Name Is'.istitle()) # 是不是每个首字符大写
print('Pring'.isprintable()) # 是不是可以打印的,主要是linux tty file dirve file
print('AAAA'.isupper()) # 是不是全大写

#将某个仅包含string的序列,通过+组合成一整个string
print('+'.join(["1", "2", "3"]))

#如果字符串中有字母,则全小写or大写输出
print("AAaa1".lower())
print("AAaa1".upper())
print('Alex Li'.swapcase()) # 大写变小写 小写变大写

#去空格及回车系列
print('\n  AE!\n'.lstrip())  # 去左边的回车及空格
print('\n AE! \n'.strip())   # 两边回车及空格都去
print('\n AE! \n'.rstrip())  # 去右边的回车及空格

# 建立字符串的对应关系,用来加密
p = str.maketrans("abcdef",'123456')
print("a1cde".translate(p))

# 替换
print('bruce'.replace('r','L',1))

# 按照分隔符分割字符串为列表,空即为空格
print('alex li1'.split(' '))
print('alex\n+li'.splitlines()) #基本等同去split('/n'),优于split的是可以自动识别win及linux换行的不同

 

Bytes

  字节类数据类型(二进制),区别于python2,在python3中年是独立的数据类型,主要用来存储音频或者视频之类。

  bytes 与 string 可以互相转换,如在网络传输时,需要将string变为bytes类型并传输

  

bytes.decode = string
string.encode = byte
"aa".encode('utf-8')

List

import copy

list = []
print("赋值为空的列表:{list1}".format(list1=list))

#存储:
list = ["aa", "bb", "cc", "dd"]

#取值:
print("最简单的遍历:{list}".format(list=list))
print("可用于浅copy的遍历:{list}".format(list=list[:]))
print("单个取值-左侧开始第一个:{list}".format(list=list[0]))
print("单个取值-左侧开始第一个:{list}".format(list=list[-1])) # 0 = -0 不多解释
print("切片取值-正向切片-顾头不顾尾:{list}".format(list=list[0:2])) #list[3]无法取出,记住顾头不顾尾
print("切片取值-反向切片-顾头不顾尾:{list}".format(list=list[-3:-1])) #list[-1]无法取出,记住顾头不顾尾
print("切片取值-切片-':'左侧为空代表从头:{list}".format(list=list[:3])) #从头开始
print("切片取值-切片-':'右侧为空代表从头:{list}".format(list=list[1:])) #到尾部结束
print("切片取值-切片-步幅为2:{list}".format(list=list[::2])) # 跳着取值

#修改:
list.append("ee")
print("增加-在列表最后追加元素:{list}".format(list=list))
list.insert(-1, "gg")
print("增加-在列表某元素前增加值:{list}".format(list=list))
list1 = ["ff", "11", "ff"]
list.extend(list1) # 扩展,将列表合并
print("增加-将两个列表合并:{list}".format(list=list))
list_del = list.pop(4) #取值并删除某元素,默认删最后一个元素
print("删除-删除{list_del}后列表为:{list}".format(list_del=list_del, list=list))
del list[4] #通用删除,在python中可以删除很多东西
print("删除-通用删除-列表为:{list}".format(list=list))
list.remove("ff") #从左往右删除第一个匹配的
print("删除-根据元素值删除-列表为:{list}".format(list=list))
list[2] = "CC"
print("修改-改值-列表为:{list}".format(list=list))
list.reverse()
print("修改-反转-列表为:{list}".format(list=list))
list.sort()
print("修改-排序-列表为:{list}".format(list=list)) #根据ASCII排序,从大到小(小写<大写<数字<特殊字符)

#查询:
print("查询-列表整体的元素数量:{list}".format(list=len(list)))
print("查询-列表中aa的数量:{list}".format(list=list.count("aa")))
print("查询-列表中aa的编号:{list}".format(list=list.index("aa")))

list.clear() #清空列表
del list #删除列表


# 浅copy只copy第一层值,如果有二层列表只是copy内存地址
# 第一层中,二层列表存储为内存指针
list = ["LiuXiaoMing", "ChenTie", ["Tianqi", "tianxia"], "ZhongyaZhou"]
# 区别于数字及字符串的赋值方式,如list2=list,并未生成任何独立的数据,仅仅是给予指针
# 即:变量的内存空间中存的是具体的值,而list,dict,tuple中存的是内存指针
# list2 = list[:]     # 浅copy方法一
# list2 = list(list)  # 浅copy方法二
list2 = list.copy() # 浅copy方法三
print("列表-修改-浅copy-list:{list1}".format(list1=list))
print("列表-修改-浅copy-list2:{list1}".format(list1=list2))
list[1] = "陈铁"
list[2][0] = "天气"
print("列表-修改-浅copy-list:{list1}".format(list1=list))
print("列表-修改-浅copy-list2:{list1}".format(list1=list2))

# 遍历的方法,用for遍历
for item in list:
    print("遍历方法一:", list.index(item), item)

for index, item in enumerate(list):
    print("遍历方法二:", index, item)

for item in enumerate(list):
    print("遍历方法三:", item)

# import copy中的copy的copy等价于list.copy
# copy.deepcopy为复制完全独立的两份数据
list = ["LiuXiaoMing", "ChenTie", ["Tianqi", "tianxia"], "ZhongyaZhou"]
list2 = copy.deepcopy(list)
print("列表-修改-深copy-list:{list1}".format(list1=list))
print("列表-修改-深copy-list2:{list1}".format(list1=list2))
list[1] = "陈铁"
list[2][0] = "天气"
print("列表-修改-深copy-list:{list1}".format(list1=list))
print("列表-修改-深copy-list2:{list1}".format(list1=list2))



list.clear()
print("列表-修改-清空:{list1}".format(list1=list))
del list1

# 浅copy的作用,浅层列表存储个体拥有的,深层的地方存储共性的地方

tuple

# tuple类似于列表,又称为只读列表
# tuple只可以读及切片,一但赋值,不可修改
tup = ("aa", 1, "bb")
tup_one_parameter = ("aa",)
print(tup.index("bb"))
print(tup.count("bb"))

dict

# dict 是一种key-vlaue的数据类型,通过key所在的索引来查数据,list中索引为位置,dict中索引为key
# dict 是无序的,这种无序指的是不能人为的排序,基本上是按照创建顺序来排序,但是这个也不是一个稳定的方法
# hash值相同时,是不可控制的
# 字典内容扩容,当字典默认空间不够时,会自动扩容,扩容后键序就会发生变化
info = {
    'stu1101': "TengLan Wu",
    'stu1102': "LongZe Luola",
    'stu1103': "XiaoZe Maliya",
    'stu1101': "Cang JingKong",
}

print(info)
# add 查询
print(info)
print(info["stu1102"]) # 除非100%确定,否则出错,建议使用get()方法
print(info.get('stu1104'))
print('stu1103' in info) #判断在dict中是否有这个数据
info["stu1102"] = "泷泽萝拉"
info["stu1104"] = "Cang Jingkong"
print(info.values())  # 仅取值
print(info.keys())  # 仅取key
print(info.items()) #Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。
print(list(info.values()))
print(list(info.keys()))

print(info)
info.setdefault("stu1105", "Boduo yejieyi") # setdefault() 取字典的值,如果取不到创建并赋值
info.setdefault("stu1101", "aaa") # setdefault() 取字典的值,如果取到,则不修改
print(info)
# del
del info["stu1101"]
info.pop("stu1102") #不同于list,必须写,否则出错
info.popitem() # 任意删除一个
info1 = {
    "stu1101":  "Cai Luoli",
    1: 2,
    2: 4
}

info.update(info1) #把两个dict合并,如果有交叉则替换,如果没有则创建
info2 = dict.fromkeys([6, 7, 8],[1, {"name":111}, 444]) # 初始化一个字典并赋予个值
print(info)
print(info2)
info2[7][1]["name"] = "all_change"
print(info2)

# 循环-1:直接取值,推荐使用该方式
for i in info:
    print(i, info[i])
# 循环-2:需要先转变成可遍历的元祖,然后再遍历,效率低下,数据量大时很耗时
for k, v in info.items():
    print(k, v)

 集合推导式

使用一句表达式构造一个[collection]式数据(list, tuple, dict, set),可以包含过滤,转换等操作。

列表语法:[item for item in collection if codition]

1 # 列表推导式
2 list1 = [i for i in range(10000) if i % 2 == 0]
3 # 列表嵌套推导式
4 lists = [list(range(10)), list(range(10, 20))]
5 evens = [item for lst in lists for item in lst if item % 2 == 0]

字典语法:{key:value for item in collection if codition}

1 # 字典推导式
2 dict1 = {key: value for key, value in enumerate(reversed(list(range(10)))) if value % 2 == 0}
3 print(dict1)

集合语法:{item for item in collection if codition}

1 # 集合推导式
2 set1 = {item for item in range(10) if item % 3 == 0}
3 print(set1)

 

 

 

 

    

posted @ 2019-11-20 22:02  FcBlogs  阅读(128)  评论(0编辑  收藏  举报