gongniue

1.数字类型                                                           

数字是不可更改类型,直接访问。主要用于计算、运算。

1.1常见方法。

 bit_length

\'\'\'
 |  bit_length(...)
 |      int.bit_length() -> int
 |
 |      Number of bits necessary to represent self in binary.
 \'输出该数字的二进制表示方式所占的位数\'
\'\'\'
#
for i in range(5):
    print(\'数字%d占二进制位数为%d\' % (i, i.bit_length()))
\'\'\'
结果
数字0占二进制位数为0
数字1占二进制位数为1
数字2占二进制位数为2
数字3占二进制位数为2
数字4占二进制位数为3
二进制          十进制
0000 0000          0
0000 0001          1
0000 0010          2
0000 0011          3
0000 0100          4
\'\'\'

 1.2 python进制的转化

 

# binary 二进制
# octal  八进制
# hex    十六进制

a = 10
print(bin(a))
# 0b1010
# 十进制的数转换成二进制的数,0o开头就是二进制的数字
# 0 1 10 11

print(oct(a))
# 0o12
# 十进制的数转换成八进制的数,0o开头就是八进制的数字
# 1 2 3 4 5 6 7

print(hex(a))
# 0xa
# 十进制的数转换成十六进制的数,0o开头就是十六进制的数字
# 0 1 2 3 4 5 6 7 8 9 a b c d e f

print(int(\'10010\', base=2))
# 18
print(int(\'10010\', base=10))
# 10010
print(int(\'10010\', base=8))
# 4104
print(int(\'10010\', base=16))
# 65552

 

2.布尔值bool                                                              

布尔值就两种:True,False。就是反应条件的正确与否。

\'\'\'
下列对象的布尔值是False
None
False(布尔类型)
所有的值为零的数
0(整型)
0.0+0.0(复数)
\'\'(空字符串)
[](空列表)
{}(空字典)
()(空元组)
\'\'\'

3.序列sequence                                                            

3.1序列介绍

在python中,序列有着相同访问模式:它的每一个元素可以通过指定一个下标的方式获得。而多个元素可以通过切片操作的方式一次得到,下标是从0开始到总元素数(序列的长度)-1结束。常见的序列有字符串、列表、元组。

3.2序列操作符

seq = \'What is you name?\'
# 成员操作符(in、not in)
print(\'w\' in seq)
# False
print(\'w\' not in seq)
# True
# 链接操作符(+)
seq = seq + \' python\'
print(seq)
# What is you name? python
# 重复操作符(*)
seq = seq * 2
print(seq)
# What is you name? pythonWhat is you name? python

3.3序列索引与切片

索引

# 根据下标打印相应内容
s = \'python自动化运维21期\'
for i in range(len(s)):
    print(i, s[i])
# 0 p
# 1 y
# 2 t
# 3 h
# ...
# 12 1
# 13 期

切片

# 序列的切片,下标(索引)范围为0...序列长度-1,遵循顾头不顾尾的原则,如果开始为0或结束为序列长度-1,可以不写
# s[起始索引:结束索引+1:步长]
# 正向打印字符串
print(s[:])
# python自动化运维21期
print(s[6:9])
# 自动化
# 可以按步长取值,步长必须保持一致,不能变化
print(s[0:9:2])
# pto自化
# 反向打印字符串
print(s[::-1])
# 期12维运化动自nohtyp

4.字符串类型                                                              

可以通过在引号间包含字符的方式创建,可存储少量数据,是不可更改类型。python中的单引号和双引号作用是相同的。

# 1.capitalize与titile
\'\'\'
capitalize
1)翻译
英 [ˈkæpɪtəlaɪz]   美 [ˈkæpɪtl:ˌaɪz]
vt.用大写字母写或印刷;使…资本化;估计…的价值;把…定为首都
vi.利用;积累资本
2)源码注释
 |  capitalize(...)
 |      S.capitalize() -> str
 |      
 |      Return a capitalized version of S, i.e. make the first character
 |      have upper case and the rest lower case.
3)作用
字符串首字母大写,其余全部小写
\'\'\'
#
s = \'lemon TREE\'
s1 = s.capitalize()
print(s1)
# Lemon tree

\'\'\'
title
1)翻译
title
英 [ˈtaɪtl]   美 [ˈtaɪtl]  
n.标题;头衔;[体]冠军;[影视]字幕
vt.加标题;赋予头衔;把…称为
adj.标题的;冠军的;头衔的
2)源码注释
 |  title(...)
 |      S.title() -> str
 |      
 |      Return a titlecased version of S, i.e. words start with title case
 |      characters, all remaining cased characters have lower case.
3)作用
字符串中每个单词的首字母大写,其余字母都小写
\'\'\'
#
s = \'lemon TREE\'
s2 = s.title()
print(s2)
# Lemon Tree


# 2.upper与lower
# *** upper(), lower() 全部大写,全部小写,在编写输入验证码时比较常见
\'\'\'
1)翻译
upper
英 [ˈʌpə(r)]   美 [ˈʌpɚ]
adj.上面的;地位较高的;内地的;地表层的
n.鞋帮,靴面;兴奋剂;令人兴奋的经历
2)源码解释
 |  upper(...)
 |      S.upper() -> str
 |
 |      Return a copy of S converted to uppercase.
3)作用
字符串字母全部大写
\'\'\'
#
s = \'lemon TREE\'
s3 = s.upper()
print(s3)
# LEMON TREE
\'\'\'
1)翻译
lower
英 [ˈləʊə(r)]   美 [ˈloʊə(r)]
adj.下方的;在底部的;较低级的
v.降低;减少;缩小
2)源码解释
 |  lower(...)
 |      S.lower() -> str
 |
 |      Return a copy of the string S converted to lowercase.
3)作用
字符串字母全部小写
\'\'\'
s = \'lemon TREE\'
s5 = s.lower()
print(s5)
# lemon tree


# 3.* 大小写反转 swapcase()
\'\'\'
1)翻译
swap
英 [swɒp]   美 [swɑp]
n.交换;交换物,被掉换者
vi.交换(工作)
vt.用…替换,把…换成,掉换(过来)
case
英 [keɪs]   美 [kes]
n.(实)例,事例;情况,状况;诉讼(事件),案件,判例;容器(箱,盒)
vt.把…装入箱(或盒等)内;加盖于;包围,围住;[俚语](尤指盗窃前)探察,侦查,窥测
2)源码解释
 |  swapcase(...)
 |      S.swapcase() -> str
 |
 |      Return a copy of S with uppercase characters converted to lowercase
 |      and vice versa.
3)作用
将字符串的大小写翻转
\'\'\'
#
s = \'lemon TREE\'
s6 = s.swapcase()
print(s6)
# LEMON tree


# 4.居中center(),左对齐ljust(),右对齐rjust(), zfill()
\'\'\'
1)翻译
center
英 [\'sentə]   美 [ˈsɛntɚ]  
n.中心;中枢;(球队的) 中锋;中心区
adj.中央的,位于正中的;(在)中心的
vt.集中;使聚集在一点;定中心;居中
vi.居中,有中心,被置于中心

2)源码解释
 |  center(...)
 |      S.center(width[, fillchar]) -> str
 |      
 |      Return S centered in a string of length width. Padding is
 |      done using the specified fill character (default is a space)
相关单词:fillchar == fill character
fill
英 [fɪl]   美 [fɪl]  
vt.& vi.(使)充满,(使)装满
vt.满足;配药;(按订单)供应;使充满(感情)
n.填满…的量;充分;装填物;路堤
character
英 [ˈkærəktə(r)]   美 [ˈkærəktɚ]  
n.性格;角色;特点;字母
vt.刻,印;使具有特征
3)作用
居中,长度自己设定,默认填充物是None,space,填充物必须是单个字符,不可以是int、bool等
\'\'\'
#
s = \'lemon TREE\'
s7 = s.center(30)
print(s7)
#          lemon TREE
s8 = s.center(30, \'-\')
print(s8)
# ----------lemon TREE----------

\'\'\'
ljust == left-justified
1)翻译
英 [\'leftdʒ\'ʌstɪfaɪd]   美 [\'leftdʒ\'ʌstɪfaɪd]  
v.左对齐( left-justify的过去式和过去分词 )
2)源码解释
 |  ljust(...)
 |      S.ljust(width[, fillchar]) -> str
 |      
 |      Return S left-justified in a Unicode string of length width. Padding is
 |      done using the specified fill character (default is a space).
3)作用
左对齐,长度自己设定必须添加,否则会报错,默认填充物是space,填充物必须是单个字符,不可以是int、bool等
TypeError: ljust() takes at least 1 argument (0 given)
\'\'\'
#
s = \'lemon TREE\'
s9 = s.ljust(20)
print(s9)
# lemon TREE
s10 = s.ljust(20, \'-\')
print(s10)
# lemon TREE----------

\'\'\'
rjust == right-justified
1)翻译
英 [\'raɪtdʒ\'ʌstɪfaɪd]   美 [\'raɪtdʒ\'ʌstɪfaɪd]  
[计] 右对齐的
2)源码解释
 |  rjust(...)
 |      S.rjust(width[, fillchar]) -> str
 |      
 |      Return S right-justified in a string of length width. Padding is
 |      done using the specified fill character (default is a space).
3)作用
右对齐,长度自己设定,默认填充物是None,space,填充物必须是单个字符,不可以是int、bool等
\'\'\'
#
s = \'lemon TREE\'
s11 = s.rjust(20)
print(s11)
#           lemon TREE
s12 = s.rjust(20, \'-\')
print(s12)
# ----------lemon TREE

\'\'\'
zfill
1)翻译
zfill == zero fill
2)源码解释
 |  zfill(...)
 |      S.zfill(width) -> str
 |      
 |      Pad a numeric string S with zeros on the left, to fill a field
 |      of the specified width. The string S is never truncated.
3)作用
zfill方法返回指定长度的字符串,原字符串右对齐,前面填充0。
\'\'\'
#
s = \'lemon TREE\'
s13 = s.zfill(20)
print(s13)
# 0000000000lemon TREE


# 5.以...开始startswith()、以...结束endswith()
\'\'\'
startswith
1)翻译
以...开始
2)源码解释
 |  startswith(...)
 |      S.startswith(prefix[, start[, end]]) -> bool
 |
 |      Return True if S starts with the specified prefix, False otherwise.
 |      With optional start, test S beginning at that position.
 |      With optional end, stop comparing S at that position.
 |      prefix can also be a tuple of strings to try.
3)作用
检查字符串是否是以相应字符串开头,是则返回 True,否则返回 False。如果开始和结束指定值,则在指定范围内检查。
\'\'\'
#
s = \'lemon TREE\'
print(s.startswith(\'a\'))
# False
print(s.startswith(\'lemon\'))
# True
print(s.startswith(\'lemon TREE\'))
# True
print(s.startswith(\'lemon TREE\', 0,-1))
# False
print(s.startswith(\'lemon TREE\', 0,))
# True

\'\'\'
endswith
1)翻译
以...结束
2)源码解释
 |  endswith(...)
 |      S.endswith(suffix[, start[, end]]) -> bool
 |
 |      Return True if S ends with the specified suffix, False otherwise.
 |      With optional start, test S beginning at that position.
 |      With optional end, stop comparing S at that position.
 |      suffix can also be a tuple of strings to try.
3)作用
检查字符串是否是以相应字符串结束,是则返回 True,否则返回 False。如果开始和结束指定值,则在指定范围内检查。
\'\'\'
#
s = \'lemon TREE\'
print(s.endswith(\'E\'))
# True
print(s.endswith(\'e\'))
# False
print(s.endswith(\'lemon TREE\'))
# True
print(s.endswith(\'lemon TREE\', 0, -1))
# False
print(s.endswith(\'lemon TREE\', 0))
# True


# 6.去除空格,制表符,换行符strip()/lstrip()/rstrip()
\'\'\'
strip
1)翻译
英 [strɪp]   美 [strɪp]
vi.剥光;剥除
vt.除去,剥去;剥夺;删除;清除,拆除
n.长条,条板;带状地带(或森林、湖面等);(足球队员的)运动服
2)源码解释
 |  strip(...)
 |      S.strip([chars]) -> string or unicode
 |
 |      Return a copy of the string S with leading and trailing
 |      whitespace removed.
 |      If chars is given and not None, remove characters in chars instead.
 |      If chars is unicode, S will be converted to unicode before stripping
3)作用
去除首尾的空格,制表符\t,换行符,项目中必须添加。可以填加填充物,多个字符表示迭代着去,前后去t->e->y
lstrip()/rstrip()用法类似
\'\'\'
#
s = \'   \tlemon tree\n\'
s14 = s.strip()
print(s14)
# lemon tree
# 迭代着去除,先去除\'-\',再去除\'+\',再去除\'*\'
s = \'--++**lemon tree**++--\'
s15 = s.strip(\'-+*\')
print(s15)
# lemon tree


# 7.分割字符串split()/rsplit()
\'\'\'
split
1)翻译
英 [splɪt]   美 [splɪt]
vt.分裂;分开;<俚>(迅速)离开;分担
n.划分;分歧;裂缝;劈叉
vi.<俚>走开;揭发;被撞碎;<美>[证券](股票)增加发行
adj.裂开的,劈开的,分离的,分裂的
2)源码解释
 |  split(...)
 |      S.split([sep [,maxsplit]]) -> list of strings
 |
 |      Return a list of the words in the string S, using sep as the
 |      delimiter string.  If maxsplit is given, at most maxsplit
 |      splits are done. If sep is not specified or is None, any
 |      whitespace string is a separator and empty strings are removed
 |      from the result.
3)作用
以seq为分隔符截取字符串,默认按照空格分割,可以添加分割字符的个数,如果是2,则返回的列表有三个元素
\'\'\'
#
s = \'lemon TREE\'
s16 = s.split()
print(s16)
# [\'lemon\', \'TREE\']
s = \'lemonTREE\'
s17 = s.split()
print(s17)
# [\'lemonTREE\']
# 如果分割符在开始,返回列表则添加\'\'元素
s = \'oldboyowusiroalex\'
s18 = s.split(\'o\')
print(s18)
# [\'\', \'ldb\', \'y\', \'wusir\', \'alex\']
# 添加分割字符的个数,如果是2,则返回的列表有三个元素
s19 = s.split(\'o\', 2)
print(s19)
# [\'\', \'ldb\', \'yowusiroalex\']

# rstrip()从右向左分割
\'\'\'
rstrip
1)翻译
right split
2)源码解释
 |  rsplit(...)
 |      S.rsplit(sep=None, maxsplit=-1) -> list of strings
 |      
 |      Return a list of the words in S, using sep as the
 |      delimiter string, starting at the end of the string and
 |      working to the front.  If maxsplit is given, at most maxsplit
 |      splits are done. If sep is not specified, any whitespace string
 |      is a separator.
3)作用
用法和split相同,只不过是从右向左分割
\'\'\'
#
s = \'oldboyowusiroalex\'
s20 = s.rsplit(\'o\', 2)
print(s20)
# [\'oldboy\', \'wusir\', \'alex\']


# 8.连接字符串join()
\'\'\'
join
1)翻译
英 [dʒɔɪn]   美 [dʒɔɪn]
vt.& vi.加入;参加;连接;联结
vt.参与;结合;上(火车、飞机等);上(路)
n.连接;结合;接合处;接合点
2)源码解释
 |  join(...)
 |      S.join(iterable) -> str
 |      
 |      Return a string which is the concatenation of the strings in the
 |      iterable.  The separator between elements is S.
3)作用
以指定字符串作为分隔符,将字符串中所有的元素(的字符串表示)合并为一个新的字符串,也可以在列表中使用
\'\'\'
#
s = \'lemon TREE\'
s21 = \'-*-\'.join(s)
print(s21)
# l-*-e-*-m-*-o-*-n-*- -*-T-*-R-*-E-*-E
l = [\'lemon\', \'tree\']
s22 = \'-*-\'.join(l)
print(s22)
# lemon-*-tree


# 9.替换replace()
\'\'\'
replace
1)翻译
英 [rɪˈpleɪs]   美 [rɪˈples]
vt.代替;替换;把…放回原位;(用…)替换
2)源码解释
 |  replace(...)
 |      S.replace(old, new[, count]) -> str
 |      
 |      Return a copy of S with all occurrences of substring
 |      old replaced by new.  If the optional argument count is
 |      given, only the first count occurrences are replaced.
3)作用
(老的,新的,次数(什么都不写为全部替换))
将字符串中的str1替换成str2,如果count指定,则替换不超过count次。
\'\'\'
#
s = \'lemon tree\'
s23 = s.replace(\'e\', \'E\')
print(s23)
# lEmon trEE
# 只把\'e\'替换成\'E\'两次
s24 = s.replace(\'e\', \'E\', 2)
print(s24)
# lEmon trEe


# 10.搜索find()/index()
\'\'\'
find
1)翻译
英 [faɪnd]   美 [faɪnd]
v.找到;发现;查明;发觉
n.发现物;被发现的人
2)源码解释
 |  find(...)
 |      S.find(sub[, start[, end]]) -> int
 |
 |      Return the lowest index in S where substring sub is found,
 |      such that sub is contained within S[start:end].  Optional
 |      arguments start and end are interpreted as in slice notation.
 |
 |      Return -1 on failure.
3)作用
检测sub是否包含在字符串中,如果指定范围start和end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
\'\'\'
#
s = \'lemon tree\'
print(s.find(\'e\'))
# 1
print(s.find(\'E\'))
# -1
# 如果是多个字符的字符串,输入匹配到的字符的第一个字符的下标
print(s.find(\'tree\'))
# 6
print(s.find(\'lemon\', 0))
# 0
print(s.find(\'tree\', 0, 6))
# -1

\'\'\'
index
1)翻译
英 [ˈɪndeks]   美 [ˈɪnˌdɛks]
n.索引;<数>指数;指示;标志
vt.给…编索引;把…编入索引;[经济学]按生活指数调整(工资、价格等)
vi.[机械学]转位
2)源码解释
 |  index(...)
 |      S.index(sub[, start[, end]]) -> int
 |
 |      Like S.find() but raise ValueError when the substring is not found.
3)作用
检测sub是否包含在字符串中,如果指定范围start和end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则会报错
\'\'\'
#
s = \'lemon tree\'
print(s.index(\'e\'))
# 1
# ind = s.index(\'XX\')
# print(ind)
# ind = s.index(\'XX\')
# ValueError: substring not found


# 11.格式化输出format()
\'\'\'
format
1)翻译
英 [ˈfɔ:mæt]   美 [ˈfɔ:rmæt]  
n.(出版物的)版式;[自](数据安排的)形式;电视节目的总安排(或计划)
vt.使格式化;安排…的格局;设计…的版面
vi.设计一个版式
2)源码解释
 |  format(...)
 |      S.format(*args, **kwargs) -> str
 |      
 |      Return a formatted version of S, using substitutions from args and kwargs.
 |      The substitutions are identified by braces (\'{\' and \'}\').
3)作用
用于字符串的格式化
\'\'\'
#
# 通过站位符输出
s25 = \'这是{}的{}个{}\'.format(\'\', \'第一\', \'博客\')
print(s25)
# 这是我的第一个博客
# 通过位置输出,便于输出带有重复字符的字符串
s26 = \'这是{0}的{1}个{2},欢迎大家光临我的{2}\'.format(\'\', \'第一\', \'博客\')
print(s26)
# 这是我的第一个博客,欢迎大家光临我的博客
# 通过关键字输出
s27 = \'这是{who}的{num}个{what}\'.format(who=\'\', num=\'第一\', what=\'博客\')
print(s27)
# 这是我的第一个博客


# 12.公共方法len()/count()
\'\'\'
len == length
1)翻译
length
英 [leŋθ]   美 [leŋθ]  
n.长度,长;时间的长短;(语)音长;一段,一节
2)源码解释
len(obj, /)
    Return the number of items in a container.
3)作用
返回序列的长度
\'\'\'
#
s = \'lemon tree\'
print(len(s))
# 10

\'\'\'
count
1)翻译
英 [kaʊnt]   美 [kaʊnt]  
n.总数;数数;罪状;论点
v.数数;计算总数;把…算入;重要
2)源码解释
 |  count(...)
 |      S.count(sub[, start[, end]]) -> int
 |      
 |      Return the number of non-overlapping occurrences of substring sub in
 |      string S[start:end].  Optional arguments start and end are
 |      interpreted as in slice notation.
3)作用
统计sub在字符串中出现的次数,可以添加范围
\'\'\'
s = \'lemon tree\'
s28 = s.count(\'e\')
print(s28)
# 3
s29 = s.count(\'E\')
print(s29)
# 0


# 13.is系列
\'\'\'
isalnum = is alphanumeric
1)翻译
英 [ˌælfənju:ˈmerɪk]   美 [ˌælfənu:ˈmerɪk]  
adj.文字数字的,包括文字与数字的
2)源码解释
 |  isalnum(...)
 |      S.isalnum() -> bool
 |      
 |      Return True if all characters in S are alphanumeric
 |      and there is at least one character in S, False otherwise.
3)作用
判断字符串是否仅由字母或数字且至少一个由数字或者字母组成
\'\'\'
#
s30 = \'1\'
print(s30.isalnum())
# True
s31 = \'a\'
print(s31.isalnum())
# True
s32 = \'1a\'
print(s32.isalnum())
# True
s33 = \'\'
print(s33.isalnum())
# False
s34 = \'+1\'
print(s34.isalnum())
# False

\'\'\'
isalpha = is alphabetic
1)翻译
英 [ˌælfəˈbetɪk]  
adj.照字母次序的,字母的
2)源码解释
 |  isalpha(...)
 |      S.isalpha() -> bool
 |      
 |      Return True if all characters in S are alphabetic
 |      and there is at least one character in S, False otherwise.
3)作用
判断字符串是否仅由字母且至少一个字母组成
\'\'\'
#
s35 = \'s+\'
print(s35.isalpha())
# False
s36 = \'s6\'
print(s36.isalpha())
# False
s37 = \'s\'
print(s37.isalpha())
# True

\'\'\'
isdigit = is digit
1)翻译
英 [ˈdɪdʒɪt]   美 [ˈdɪdʒɪt]  
n.数字;手指,足趾;一指宽
2)源码解释
 |  isdigit(...)
 |      S.isdigit() -> bool
 |      
 |      Return True if all characters in S are digits
 |      and there is at least one character in S, False otherwise.
3)作用
判断字符串是否仅由字母且至少一个数字组成
\'\'\'
#
s38 = \'5\'
print(s38.isdigit())
# True
s39 = \'5s\'
print(s39.isdigit())
# False
s40 = \'5+\'
print(s40.isdigit())
# False
字符串常见方法

5.列表list                                                                

容器型数据类型,可变数据类型。可以包含数字、布尔值、字符串、列表、元组、字典、集合等元素,例如:[True, 1, \'name\', {\'name\': \'oldboy\'}, [1, 2, 3], (2, 3, 4), set(1, 2, 3)],可以进行检索和索引等操作

5.1增删改查

增:

# 1.在列表末尾添加新的对象append
\'\'\'
append
1)翻译
英 [əˈpend]   美 [əˈpɛnd]
vt.附加;添加;贴上;签(名)
2)源码注释
 |  append(...)
 |      L.append(object) -> None -- append object to end
3)作用
在列表末尾添加新的对象
\'\'\'
#
l = [1, 2, 3, 4]
l.append(5)
print(l)
# [1, 2, 3, 4, 5]
# 这个是一个动作,没有返回值,所以是None
print(l.append(6))
# None

# 2.按照索引插入insert
\'\'\'
insert
1)翻译
英 [ɪnˈsɜ:t]   美 [ɪnˈsɜ:rt]  
vt.插入;嵌入;(在文章中)添加;加插
n.插入物;添入物(尤指一页印刷品图中插入或套印的小图);(书报的)插页;添加物
2)源码注释
 |  insert(...)
 |      L.insert(index, object) -- insert object before index
3)作用
在索引的前面插入对象
\'\'\'
#
l = [\'apple\', \'banana\', \'orange\']
l.insert(1, \'pear\')
print(l)
# [\'apple\', \'pear\', \'banana\', \'orange\']

# 3.迭代着增加extend
\'\'\'
extend
1)翻译
英 [ɪkˈstend]   美 [ɪkˈstɛnd]  
vt.& vi.延伸;扩大;推广
vt.延长;伸展;给予;发出(邀请、欢迎等)
vi.延伸;伸出;增加
2)源码注释
 |  extend(...)
 |      L.extend(iterable) -> None -- extend list by appending elements from the iterable
3)作用
迭代着增加,把序列分解成最小元素添加到原列表的结尾
\'\'\'
#
l1 = [\'a\', \'b\', \'c\']
l2 = [\'d\', \'e\', \'f\']
l1.extend(l2)
print(l1)
print(l2)
# [\'a\', \'b\', \'c\', \'d\', \'e\', \'f\']
# [\'d\', \'e\', \'f\']
l2.extend(\'567\')
print(l2)
# [\'d\', \'e\', \'f\', \'5\', \'6\', \'7\']
\'\'\'

删:

# 1.有返回值的删除pop()
\'\'\'
pop
1)说明
有返回值的删除
2)源码解释
 |   L.pop([index]) -> item -- remove and return item at index (default last).
 |  Raises IndexError if list is empty or index is out of range.
3)作用
用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
\'\'\'
#
# 不添加下标删除,默认列表最后一个元素
l = [\'a\', \'b\', \'c\', \'d\']
l.pop()
print(l)
# [\'a\', \'b\', \'c\']
# 根据下标删除列表的元素
l = [\'a\', \'b\', \'c\', \'d\']
l.pop(1)
print(l)
# [\'a\', \'c\', \'d\']
# 有返回值,可以看到删除的元素
l = [\'a\', \'b\', \'c\', \'d\']
print(l.pop(1))
# b

# 2.按照元素删除remove()
\'\'\'
remove
1)翻译
英 [rɪˈmu:v]   美 [rɪˈmuv]  
vt.去除;开除;脱掉,拿下;迁移
vi.迁移,移居;离开
n.距离,差距;移动
2)源码解释
 |  L.remove(value) -> None -- remove first occurrence of value.
 |  Raises ValueError if the value is not present.
3)作用
根据元素删除,如果不添加参数会报错
\'\'\'
#
l = [\'a\', \'b\', \'c\', \'d\']
l.remove(\'d\')
print(l)
# [\'a\', \'b\', \'c\']

# 3.清空列表clear()
\'\'\'
clear
1)源码解释
L.clear() -> None -- remove all items from L
2)作用
清空列表,返回一个空列表
\'\'\'
#
l = [\'a\', \'b\', \'c\', \'d\']
l.clear()
print(l)
# []

# 4.内存级别删除del
\'\'\'
del -- delete 删除
内存级别删除
\'\'\'
l = [\'a\', \'b\', \'c\', \'d\']
del l
print(l)
# NameError: name \'l\' is not defined

改:

# 1.按照索引修改
l = [\'a\', \'b\', \'c\', \'d\']
l[2] = \'e\'
print(l)
# [\'a\', \'b\', \'e\', \'d\']

# 2.按照切片修改
l = [\'a\', \'b\', \'c\', \'d\']
l[1:3] = [1, 2]
print(l)
# [\'a\', 1, 2, \'d\']

查:

# 1.按照索引查看列表元素
l = [\'a\', \'b\', \'c\', \'d\']
print(l[0])
# a

# 2.按照切片查看列表元素
l = [\'a\', \'b\', \'c\', \'d\']
print(l[2:4])
# [\'c\', \'d\']
print(l[::2])
# [\'a\', \'c\']

# 3.循环查看列表
l = [\'a\', \'b\', \'c\', \'d\']
for i in l:
    print(i)
# a
# b
# c
# d

5.2其他方法:

# 1.统计列表中元素个数count
l = [\'a\', \'b\', \'c\', \'d\', \'a\']
print(l.count(\'a\'))
# 2

# 2.统计列表长度len
l = [\'a\', \'b\', \'c\', \'d\', \'a\']
print(len(l))
# 5

# 3.查找元素下标index,输出列表中第一个出现该元素的下标
l = [\'a\', \'b\', \'c\', \'d\', \'a\']
ind = l.index(\'a\')
print(ind)
# 0
ind = l.index(\'f\')
# ValueError: \'f\' is not in list

# 4.排序sort
# 从大到小
l = [\'c\', \'d\', \'a\', \'b\']
l.sort(reverse=True)
print(l)
# 从小到大
l = [\'c\', \'d\', \'a\', \'b\']
l.sort(reverse=False)
print(l)
# [\'a\', \'b\', \'c\', \'d\']
# 默认从小到大
l = [\'c\', \'d\', \'a\', \'b\']
l.sort()
print(l)
# [\'a\', \'b\', \'c\', \'d\']

# 5.反向输出列表
l = [\'c\', \'d\', \'a\', \'b\']
l.reverse()
print(l)
# [\'b\', \'a\', \'d\', \'c\']

# 6.列表的嵌套
l = [1, 2, 3, [4, 5, 6]]
print(l[3][2])
# 6

6.字典dict                                                                

6.1介绍

字典典的key是唯一的。key 必须是不可变的数据类型。

   key:不可变的数据类型(可哈希):str,bool,tuple,int。

  value:任意数据类型。

数据类型分类:

  不可变的数据类型(可哈希):str,bool,tuple,int

  可变的数据类型:dict,list,set。

  容器类数据类型:list,tuple,dict,set.

字典:存储数据多,关系型数据,查询速度快(二分查找)。

3.6版本之前,字典是无序的,3.6之后字典是有序的。

 

6.2常见方法

创建字典:

# 创建字典
# 1. 创建空字典
dic = {}
print(dic , type(dic))
# {} <class \'dict\'>

# 2. 直接赋值创建字典
dic = {\'a\': 1, \'b\': 2, \'c\': 3}
print(dic , type(dic))
# {\'a\': 1, \'b\': 2, \'c\': 3} <class \'dict\'>

# 3. 通过关键字dict和关键字参数创建字典
dic = dict(a=1, b=2, c=3)
print(dic , type(dic))
# {\'a\': 1, \'b\': 2, \'c\': 3} <class \'dict\'>

# 4. 通过二元组列表创建字典
lst = [(\'a\', 1), (\'b\', 2), (\'c\', 3)]
dic = dict(lst)
print(dic , type(dic))
# {\'a\': 1, \'b\': 2, \'c\': 3} <class \'dict\'>

# 5. dict和zip结合创建字典
# 5.1 - 通过两个字符串创建字典
dic = dict(zip(\'abc\', \'123\'))
print(dic , type(dic))
# {\'a\': \'1\', \'b\': \'2\', \'c\': \'3\'} <class \'dict\'>
# 5.2 - 通过一个字符串、一个列表创建字典
dic = dict(zip(\'abc\', [1,2,3]))
print(dic , type(dic))
# {\'a\': 1, \'b\': 2, \'c\': 3} <class \'dict\'>
# 5.3 - 通过一个字符串、一个元组创建字典
dic = dict(zip(\'abc\', (1,2,3)))
print(dic , type(dic))
# {\'a\': 1, \'b\': 2, \'c\': 3} <class \'dict\'>
# 5.4 - 通过两个列表串创建字典
lst1 = [\'a\', \'b\', \'c\']
lst2 = [1, 2, 3]
dic = dict(zip(lst1, lst2))
print(dic , type(dic))
# {\'a\': 1, \'b\': 2, \'c\': 3} <class \'dict\'>
# 5.5 - 通过两个列表串创建字典延伸
lst = [\'a\', 1, \'b\', 2, \'c\', 3]
dic = dict(zip(lst[::2], lst[1::2]))
print(dic , type(dic))
# {\'a\': 1, \'b\': 2, \'c\': 3} <class \'dict\'>

# 6. 通过字典推导式创建字典
dic = {i:2*i for i in range(3)}
print(dic , type(dic))
# {0: 0, 1: 2, 2: 4} <class \'dict\'>

# 7. 通过dict.fromkeys()创建字典
# 通常用来初始化字典,设置value的默认值
dic = dict.fromkeys(range(3), \'x\')
print(dic , type(dic))
# {0: \'x\', 1: \'x\', 2: \'x\'} <class \'dict\'>

增:

# 1.有则覆盖,无则添加
dic = {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\'}
dic[\'high\'] = 180
print(dic)
#  {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\', \'high\': 180}
dic[\'name\'] = \'ritian\'
print(dic)
# {\'name\': \'ritian\', \'age\': 30, \'hobby\': \'games\', \'high\': 180}

# 2.有则不变,无则添加setdefault()
# 无则添加
dic = {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\'}
dic.setdefault(\'high\', 190)
print(dic)
# {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\', \'high\': 190}
dic.setdefault(\'name\', \'日天\')
print(dic)
# {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\', \'high\': 190}

删:

# 1.根据键删除对应值,有返回值pop()
dic = {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\'}
print(dic.pop(\'name\'))
# xiaoming
print(dic)
# {\'age\': 30, \'hobby\': \'games\'}

# 2.清空字典clear()
dic = {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\'}
dic.clear()
print(dic)
# {}

# 3.删除字典随机值,有返回值popitem()
dic = {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\'}
print(dic.popitem())
# (\'hobby\', \'games\')
print(dic)
# {\'name\': \'xiaoming\', \'age\': 30}

改:

# 1.直接更改
dic = {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\'}
dic[\'name\'] = \'小明\'
print(dic)
# {\'name\': \'小明\', \'hobby\': \'games\', \'age\': 30}

# 2.字典更新update()
dic1 = {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\'}
dic2 = {\'weight\': 75, \'high\': 180, \'age\': 31}
# 将dic2中的键值对覆盖添加到dic1中
dic1.update(dic2)
print(dic1)
# {\'name\': \'xiaoming\', \'age\': 31, \'weight\': 75, \'high\': 180, \'hobby\': \'games\'}

查:

# 1.根据键查
dic = {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\'}
print(dic[\'name\'])
# xiaoming

# 2.根据值查get()
print(dic.get(\'name\'))
# xiaoming
# 可以添加描述性语句
print(dic.get(\'high\', \'没有此键\'))
# 没有此键

# 3.循环打印键keys()/值values()/键值对items()
# 打印键key()
for i in dic.keys():
    print(i)
# name
# hobby
# age
# 值values()
for j in dic.values():
    print(j)
# xiaoming
# games
# 30
# 键值对items()
for k in dic.items():
    print(k)
# (\'name\', \'xiaoming\')
# (\'age\', 30)
# (\'hobby\', \'games\')

其他方法:

# 1.字典长度len
dic = {\'name\': \'xiaoming\', \'age\': 30, \'hobby\': \'games\'}
print(len(dic))
# 3

# 2.fromkeys
# dict.fromkeys(seq[, value])
# fromkeys函数用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。
dic1 = dict.fromkeys(\'abc\', \'name\')
print(dic1)
# {\'c\': \'name\', \'b\': \'name\', \'a\': \'name\'}
dic2 = dict.fromkeys([1,2,3], \'id\')
print(dic2)
# {1: \'id\', 2: \'id\', 3: \'id\'}
# 使用字典更改值的方法,其他键值对不会更改
dic2[1] = \'序号\'
print(dic2)
# 使用列表的追加方法,所有键的值都会更改
dic3 = dict.fromkeys(\'abc\', [])
print(dic3)
# {\'a\': [], \'c\': [], \'b\': []}
dic3[\'a\'].append(\'apple\')
print(dic3)
# {\'b\': [\'apple\'], \'c\': [\'apple\'], \'a\': [\'apple\']}

# 3.字典的嵌套与列表的嵌套方式类似

7.元组tuple                                                               

元组是容器型数据类型,不可变数据类型,单元组的子元素的元素可以更改。

tu = (11, 2, True, [2,3,4], \'string\')
# 1.循环打印
for i in tu:
    print(i)
# 11
# 2
# True
# [2, 3, 4]
# string

# 2.索引打印
print(tu[1])
# 2
# 3.切片打印,打印结果还是元组
print(tu[:3:2])
# (11, True)

# 4.查看元素下标
print(tu.index(True))
# 2

# 5.统计元素个数
print(tu.count(2))
# 1

# 6.统计元组长度
print(len(tu))
# 5

# 7.更改子元素的元素
tu[-2].append(666)
print(tu)
# (11, 2, True, [2, 3, 4, 666], \'string\')

8.集合set                                                                 

集合:无序,不重复的数据类型。它里面的元素必须是可哈希的,但是集合本身是不可哈希的。

python可哈希数据类型:数字、布尔值、字符串、元组

不可哈希数据类型:列表、字典

8.1定义集合

# 定义:数字、字符串、布尔值、元组
set1 = {1, \'string\', False, (4, 5, 6)}
print(set1)
# {False, 1, (4, 5, 6), \'string\'}

8.2可以用于列表的去重

# 列表去重
l1 = [1, 1, 2, 2, 3, 4, 5, 6]
l2 = list(set(l1))
print(l2)
# [1, 2, 3, 4, 5, 6]

8.3增、删

# 1.增add()
set2 = {1, \'string\', False, (4, 5, 6)}
set2.add(666)
print(set2)
# {False, 1, 666, (4, 5, 6), \'string\'}

# 2.更新update(),将对象分割成最小元素添加到集合中
set2.update(\'abc\')
print(set2)
# {False, 1, \'string\', \'a\', \'c\', \'b\', 666, (4, 5, 6)}

# 1.删除指定元素remove()
set1 = {1, \'string\', False, (4, 5, 6)}
set1.remove(1)
print(set1)
# {False, \'string\', (4, 5, 6)}

# 2.随机删除一个元素pop()
set1 = {1, \'string\', False, (4, 5, 6)}
set1.pop()
print(set1)
# {1, \'string\', (4, 5, 6)}

# 3.清空集合clear()
set1 = {1, \'string\', False, (4, 5, 6)}
set1.clear()
print(set1)
# set()

# 4.内存级删除集合del
set1 = {1, \'string\', False, (4, 5, 6)}
del set1
print(set1)
# NameError: name \'set1\' is not defined

8.4关系测试:交集、并集、差集、子集...

set1 = {1, 2, 3, 4, 5, 6}
set2 = {5, 6, 7, 8, 9, 10}
# 1.交集 & intersection
# set1和set2共有的
print(set1 & set2)
# {5, 6}
print(set1.intersection(set2))
# {5, 6}

# 2.并集 | union
# set1+set2独有的
print(set1 | set2)
# {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
print(set1.union(set2))
# {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

# 3.差集 - difference
# set1有而set2没有
print(set1 - set2)
# {1, 2, 3, 4}

# 4.反交集 ^ symmetric_difference
# set1中set2没有的+set2中set1没有的
print(set1 ^ set2)
# {1, 2, 3, 4, 7, 8, 9, 10}
print(set1.symmetric_difference(set2))
# {1, 2, 3, 4, 7, 8, 9, 10}

# 5.子集
set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5, 6}
# 判断set1是不是set2的子集
print(set1 < set2)
# True
print(set1.issubset(set2))
# True

# 6.超集
# 判断set2是不是set1的超集
print(set2 > set1)
# True
print(set2.issuperset(set1))
# True

# 7.不可变集合,冻集frozenset()
set1 = frozenset(\'apple\')
print(set1)
# frozenset({\'p\', \'a\', \'l\', \'e\'})
print(type(set1))
# <class \'frozenset\'>

9.数据类型的补充                                                          

# 1.按步长删除列表的值
# 最直接的方式del
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del l[1::2]
print(l)
# [1, 3, 5, 7, 9]

# 使用循环删除,但必须是倒序方式,因为顺序删除时,列表随之改变,会出错
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
i = len(l)-1
while i > 0:
    if i % 2 == 1:
        del l[i]
    i -= 1
print(l)
# [1, 3, 5, 7, 9]

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(len(l1)-1,-1,-1):
    if i % 2 == 1:
        del l[i]
print(l)
# [1, 3, 5, 7, 9]

# 2.range 可定制的数字列表
for i in range(4):
    print(i)
# 0
# 1
# 2
# 3
for i in range(1,4):
    print(i)
# 1
# 2
# 3
for i in range(1,5,2):
    print(i)
# 1
# 3
# 反向取,必须添加步长
for i in range(4,1,-1):
     print(i)
# 4
# 3
# 2

# 3.dict 再循环字典时,不要改变字典的大小。
dic = {\'k1\':\'v1\',\'k2\':\'v2\',\'k3\':\'v3\',\'r\':666}
l1 = []
# 循环字典,将字典中的键添加到列表中
for i in dic:
    if \'k\' in i:
        l1.append(i)
print(l1)
# [\'k2\', \'k3\', \'k1\']
# 循环列表,删除字典中的键
for i in l1:
    del dic[i]
print(dic)

# 4.tu 如果元组里面只有一个元素并且没有逗号隔开,那么他的数据类型与该元素一致。
tu1 = (1)
print(tu1,type(tu1))
# 1 <class \'int\'>
tu2 = (\'string\')
print(tu2,type(tu2))
# string <class \'str\'>
tu3 = ([\'string\',1,2])
print(tu3,type(tu3))
# [\'string\', 1, 2] <class \'list\'> 

10.小数据池,copy                                                         

# 1.对于赋值运算来说,相同值的变量指向的是同一个内存地址,所以他们完全是一样的。
a = \'string\'
b = \'string\'
print(a == b)
# True
print(a is b)
# True
print(id(a))
# 17922288
print(id(b))
# 17922288

# 2.python中的小数据池
# int -5~ 256的相同的数字全都指向一个内存地址,节省空间
# str:s = \'a\' * 20 以内都是同一个内存地址
# 只要字符串含有非字母元素,那就不是一个内存地址

# 3.浅拷贝copy
# 对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
l1 = [1, 2, 3, [2, 3, 4]]
l2 = l1.copy()
print(l1, l2)
# [1, 2, 3, [2, 3, 4]] [1, 2, 3, [2, 3, 4]]
print(id(l1), id(l2))
# 7625672 7623496
l1[-1].append(5)
print(l1, l2)
# [1, 2, 3, [2, 3, 4, 5]][1, 2, 3, [2, 3, 4, 5]]
print(id(l1), id(l2))
# 7625672 7623496
print(id(l1[-1]),id(l2[-1]))
# 7625160 7625160

# 4.深拷贝deepcopy()
# 对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
import copy
l1 = [1, 2, 3, [2, 3, 4]]
l2 = copy.deepcopy(l1)
print(l1, l2)
# [1, 2, 3, [2, 3, 4]] [1, 2, 3, [2, 3, 4]]
print(id(l1), id(l2))
# 11506376 7625672
l1[-1].append(5)
print(l1, l2)
# [1, 2, 3, [2, 3, 4, 5]] [1, 2, 3, [2, 3, 4]]
print(id(l1), id(l2))
# 11506376 7625672

11.编码                                                                   

# Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,
# 你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。
# 对于英文 s = \'laonanhai\' print(s,type(s)) # laonanhai <class \'str\'> s1 = b\'laonanhai\' print(s1,type(s1)) # b\'laonanhai\' <class \'bytes\'> # 对于中文: s = \'中国\' print(s,type(s)) # 中国 <class \'str\'> s1 = b\'\xe4\xb8\xad\xe5\x9b\xbd\' print(s1,type(s1)) # b\'\xe4\xb8\xad\xe5\x9b\xbd\' <class \'bytes\'> # 转化 s = \'laonanhai\' s2 = s.encode(\'utf-8\') #str -->bytes encode 编码 s3 = s.encode(\'gbk\') print(s2,s3) # b\'laonanhai\' b\'laonanhai\' s = \'中国\' # utf-8中文用三个字节表示一个字符 s2 = s.encode(\'utf-8\') #str -->bytes encode 编码 # gbk中文用两个字节表示一个字符 s3 = s.encode(\'gbk\') print(s2) # b\'\xe4\xb8\xad\xe5\x9b\xbd\' print(s3) # b\'\xd6\xd0\xb9\xfa\' ss = s2.decode(\'utf-8\') # bytes ---> str decode 解码 print(ss) # 中国

分类:

技术点:

相关文章: