文章来源: https://www.cnblogs.com/seagullunix/articles/7297946.html

基本运算符

常用数据类型:

字符串(Str)

数字(Digit)

列表(List)

元组(Tuple)

集合(Set)

字典(Dict)

布尔(bool)

Python文件处理

基本运算符


当然,在讲数据类型之前,先了解一下Python的基本运算符:

运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算和位运算。以下分别学习每个运算符:

一、算数运算:

 
运算符 描述 实例
+ 普通的加法运算 10+2=12
- 普通的减法运算 10-2=8
* 普通的乘法运算 10*2=20
/ 普通的除法运算 10/2=5
% 取模运算,两数相除,取余数 10%2=0;10%3=1
// 取整除,两数相除,无论是否整除,只取商的整数部分,(没有四舍五入之说) 10.0//2.0=5.0;10//3=3;18//3=6
** 求幂运算,取一个数的幂次方 10**2=100

二、比较运算

说明: 以下比较的是两个对象的值。

运算符 描述 实例
== 等于,比较两个对象是否相等,返回True或者False 如果a=10,b=10,那么a==b,返回True
!= 不等于,比较两个对象是否不相等,返回True或者False 如果a=10,b=10,那么a!=b,返回False
<> 不等于,比较两个对象是否不相等,返回True或者False,不常用 如果a=10,b=10,那么a<>b,返回False
> 大于,比较a对象是否大于b对象,返回True或者False 如果a=10,b=10,那么a>b,返回False
< 小于,比较比较a对象是否小于b对象,返回True或者False 如果a=10,b=10,那么a<b,返回False
>= 大于等于,比较a对象是否大于等于b对象,返回True或者False 如果a=10,b=10,那么a=>b,返回True
<= 小于等于,比较a对象是否小于等于b对象,返回True或者False 如果a=10,b=10,那么a<=b,返回True

三、赋值运算

运算符 描述 实例
= 简单的赋值运算符,元素1赋值给元素2 c=a+b,c=10+b等这些都属于简单的赋值运算
+= 加法赋值运算符,先相加,再赋值,多用于循环语句中元素的自加 c+=a相当于c=c+a
-= 减法赋值运算符,先相减,再赋值,多用于循环语句中元素的自减 c-=a相当于c=c-a
*= 乘法赋值运算符,先相乘,再赋值,多用于循环语句中元素的自乘 c*=a相当于c=c*a
/= 除法赋值运算符,先相除,再赋值,多用于循环语句中元素的自除 c/=a相当于c=c/a
%= 取模赋值运算符,先取模,再赋值 c%=a相当于c=c%a
**= 取幂赋值运算符,先取幂,再赋值 c**=a相当于c=c**a
//= 取整除赋值运算符,先取整除,再赋值 c//=a相当于c=c//a

四、逻辑运算

运算符 描述 实例
and ‘与’,并且的意思,两边的元素都为真即返回真 a and b:a为真,b为假,返回False,a为真,b为真 ,返回True
or ‘或’,或者的意思,两边的元素只要有一个为真,即返回真 a or b:a为真,b为假,返回True,a为假,b为假 ,返回False
not ‘非’,相反的意思,如果是真的,返回假,如果是假的,返回真 not a:a为真,返回False,a为假,返回True

五、成员运算

运算符 描述 实例
in 在:如果对象a能在对象b中找到,则返回True,否则,返回False x in y ;如果x在y中,则会返回True,否则为False
not in 不在:如果对象a能在对象b中找不到,则返回True,否则,返回False x not in y ;如果x不在y中,则会返回True,否则为False

六、身份运算

说明只列出两个比较常用的,身份运算比较的是对象的name、id、value,以下比较的是两个对象的id(id相同,即type相同,值相同)

运算符 描述 实例
is 是:如果对象a和对象b的id相同,则返回True,否则,返回False x is y ;如果x和y的id相同,则会返回True,否则为False
is not 不是:如果对象a和对象b的id不相同,则返回True,否则,返回False x is not y ;如果x和y的id不相同,则会返回True,否则为False

七、位运算

比较二进制位,例如a=30,b=11 ,(转换二进制函数bin())二进制表示就是a=11110,b=1011。位运算比较复杂,可以仅作了解。

运算符 描述 实例
   & 按位与运算符:如果存在于两个对象中,则复制位到结果中。例如参与运算的两个值,从右到左进行比较,如果相应位都为1,则结果为1,只要有一个为0,结果即为0 a&b,从右到左进行比较,结果即为1010,a比b多一位,a从左到右的第一位1在b的相应位置是空,即没有,则结果也是没有。
  | 按位或运算符:只要存在于其中一个对象中,则复制位到结果中。例如参与运算的两个值,从右到左比较,如果相应位置中有一个是1,则结果为1 a|b,从右到左进行比较,结果即为11111,同样a从左到右的第一位1在b的相应位置是空,即没有,但是结果仍然是1.
   ^ 按位异或运算符:如果对象对应的的二进位相异时,复制位。例如参与运算的两个值,从右到左进行比较,如果相应位不一样,即一个为0,一个为1,则结果为1。 a^b,从右到左进行比较,结果即为10101,a比b多一位,a从左到右的第一位1在b的相应位置是空,结果相异,则为1。
   ~ 按位取反运算符:一元的,具有翻转效果。例如参与运算的一个值,把相应位置的1变为0,0变为1 ~a,结果即为-31,二进制为11111, 在一个有符号二进制数的补码形式
  << 左移动运算符:左操作数的值由右操作数指定的位数左移。例如参与运算的两个值,左边的数的各二进制位全部左移,左移位数由右边的数值决定,高位丢弃,低位补0 a<<b,结果1111000000000000,因为b=11,所以左移了11位,低位补0
        >>    右移动运算符:左操作数的值由右操作数指定的位数右移。例如参与运算的两个值,左边的数的各二进制位全部右移,右移为数由右边的数值决定,高位丢弃,低位补0

a>>b,结果0,因为b=11,所以右移了11位,高位丢弃,另如果

b=3,则结果为11

常用数据类型

字符串(str)

字符串的声明有三种方式:单引号,双引号和三引号(三个单引号或者三个双引号)。不可变(可hash)

例如:

  1. print('hello word!')
  2. hello word!
  3. print("hello word!")
  4. hello word!
  5. print('''hello word!''')
  6. hello word!
  7. print("""hello word!""")
  8. hello word!

字符串根据索引的一些切片操作:

  1. str = 'hello world!'
  2. print(str) # 输出字符串
  3. hello world!
  4. print(str[0:-1]) # 输出第一个到倒数第二个的所有字符(字符串具有顾头不顾尾的特性,所以不会取到最后一个字符)
  5. hello world
  6. print(str[0]) # 输出字符串第一个字符
  7. h
  8. print(str[2:5]) # 输出从第三个开始到第五个的字符
  9. llo
  10. print(str[2:]) # 输出从第三个开始后的所有字符
  11. llo world!
  12. print(str * 2) # 输出字符串两次
  13. hello world!hello world!
  14. print(str + "TEST") # 连接字符串
  15. hello world!TEST

移除空格 strip,lstrip,rstrip

  1. str=' hello world!'
  2. sea='hello world!***'
  3. print(str.strip()) #默认移除全部空格
  4. hello world!
  5. print(sea.strip('*')) #移除指定特殊字符*
  6. hello world!
  7. print(str.lstrip()) #默认移除左边空格
  8. hello world!
  9. print(sea.rstrip('*')) #移除右边指定特殊字符*
  10. hello world!

切分 split,rsplit

  1. str='root:x:0:0::/root:/bin/bash'
  2. print(str.split()) #默认以空格为分隔符
  3. ['root:x:0:0::/root:/bin/bash']
  4. print(str.split(':',1)) #以冒号为分隔符,只分割第一个冒号,默认分割全局
  5. ['root', 'x:0:0::/root:/bin/bash']
  6. print(str.rsplit(':',2,))#从右边开始分割,分割从右边数的前两个冒号
  7. ['root:x:0:0:', '/root', '/bin/bash']

取字符串长度 len

  1. str='hello world!'
  2. print(len(str)) #取字符串的长度,等价于print(str.__len__())
  3. 12
  4. print(str.__len__())
  5. 12

判断开头和结尾字符 startswith,endswith

  1. str='seagull'
  2. print(str.endswith('l')) #判断结尾,如果正确,则返回True,否则返回False
  3. True
  4. print(str.endswith('l',1,3)) #指定开头和结尾
  5. False
  6. print(str.startswith('s')) #判断开头,如果正确,则返回True,否则返回False
  7. True
  8. print(str.startswith('s',3,4)) ##指定开头和结尾
  9. False

字符串的替换操作 replace

  1. str='seagull'
  2. print(str.replace('l','9')) #字符串的替换,将字母l替换为数字9,默认替换全局
  3. seagu99
  4. print(str.replace('l','9',1)) #字符串的替换,指定只将第一个找到的字母l替换为9
  5. seagu9l

format的三种玩法

  1. name='seagull'
  2. age=18
  3. hobby='eat'
  4. print('我是%s,今年%s岁,爱好%s'%(name,age,hobby)) #%s的传参法
  5. 我是seagull,今年18岁,爱好eat
  6. print('我是{},今年{}岁,爱好{}'.format('seagull','18','eat')) #花括号传参,和%s有点相似
  7. 我是seagull,今年18岁,爱好eat
  8. print('我是{},今年{}岁,爱好'.format('seagull','18','eat')) #后面的传参可以比前面的花括号多,但是不能比前面的花括号少,否则会报错
  9. 我是seagull,今年18岁,爱好
  10. print('我是{1},今年{0}岁,爱好{0}'.format('seagull','18','eat')) #花括号里面写数字传参法,后面的参数默认指定了顺序 ,花括号里面可以写指定的数字镜像传参
  11. 我是18,今年seagull岁,爱好seagull
  12. print('我是{name},今年{age}岁,爱好{hobby}'.format(name='seagull',age='18',hobby='eat')) #指定参数,用一个等于号赋 值
  13. 我是seagull,今年18岁,爱好eat

查找和统计:find,rfind,index,rindex,count

  1. str='seagull'
  2. print(str.find('l')) #查找字符l的下标
  3. 5
  4. print(str.find('b')) #查找字符b的下标,找不到返回-1
  5. -1
  6. print(str.index('l')) #查找字符l的下标
  7. 5
  8. print(str.index('b')) #查找字符d的下标,找不到会报错
  9. Traceback (most recent call last):
  10. File "<stdin>", line 1, in <module>
  11. ValueError: substring not found
  12. print(str.rfind('l')) #从右边开始查找字符l的下标
  13. 6
  14. print(str.rindex('l')) #从右边查找字符l的下标
  15. 6
  1. print(str.count('l')) #统计字符串中包含字符的个数,可以指定范围查找
  2. 2
  3.  
  4. print(str.count('l',1,4)) #统计字符串中包含字符的个数
  5. 0

连接字符串 join  (#可迭代对象必须都是字符串)

  1. str=' ' #给tag赋值为空格
  2. print(str.join(['seagull','is','looker'])) #插入字符,每个字符串之间以空格分割
  3. seagull is looker
  4. str='a' #给tag赋值为a
  5. print(str.join(['seagull','is','looker'])) #插入字符,每个字符串之间以a分割
  6. seagullaisalooker
  7. str='9'
  8. print(str.join(['seagull','is','looker'])) #插入字符,每个字符串之间以数字9分割
  9. seagull9is9looker
  10. str='9'
  11. print(str.join(['seagull''is''looker'])) #插入字符,每个字符串之间没有分割
  12. seagullislooker
  13. str='seagull'
  14. print(":".join(str)) #以冒号为分隔符,将字符串分割
  15. s:e:a:g:u:l:l
  1. 显示打印 center,ljust,rjust,zfill
  1. str='seagull'
  2. print(str.center(30,'*')) #30个占位符,居中显示,字符不足时用*填充,默认是用空格填充
  3. ***********seagull************
  4. print(str.ljust(10,'1')) #10个占位符,靠左显示,字符不足用数字1填充,默认空格
  5. seagull111
  6. print(str.rjust(10)) #10个占位符,靠右显示,字符不足默认空格填充,也可指定
  7. seagull
  8. print(str.zfill(10)) #10个占位符,靠右显示,字符不足用0填充,不能自己指定
  9. 000seagull
  1. 转换tab键为空格 expandtabs
  1. str='sea\tgull'
  2. print(str)
  3. sea gull
  4. print(str.expandtabs(1))
  5. sea gull

字母大小写转换 lower  ,upper ,captalize,swapcase,title

  1. str='seaGULL'
  2. print(str.lower())#将包含的大写字母转换成小写
  3. print(str.upper())#将包含的小写字母转换成大写
  1. str1='sea GULL'
  2. str2='sea_Gull'
  3. print(str1.capitalize()) #只首字母大写,其他的均小写
  4. Sea gull
  5. print(str2.capitalize())
  6. Sea_gull
  7. print(str1.swapcase()) #大小写翻转,大写变小写,小写变大写
  8. SEA gull
  9. print(str2.swapcase())
  10. SEA_gULL
  11. print(str1.title()) #标题,每个单词的首字母大写,其他的小写
  12. Sea Gull
  13. print(str2.title())
  14. Sea_Gull

is数字系列(Python3),正确返回True,否则返回False

  1. num1=b'4' #bytes
  2. num2=u'4' #unicode,python3中无需加u就是unicode
  3. num3='四' #中文数字
  4. num4='Ⅳ' #罗马数字
  5. #isdigt:bytes,unicode,常用
  6. ... print(num1.isdigit())
  7. True
  8. print(num2.isdigit())
  9. True
  10. print(num3.isdigit())
  11. False
  12. print(num4.isdigit())
  13. False
  14. #isdecimal:uncicode
  15. ... #bytes类型无isdecimal方法
  16. ... print(num2.isdecimal())
  17. True
  18. print(num3.isdecimal())
  19. False
  20. print(num4.isdecimal())
  21. False
  22. #isnumberic:unicode,中文数字,罗马数字
  23. ... #bytes类型无isnumberic方法
  24. ... print(num2.isnumeric())
  25. True
  26. print(num3.isnumeric())
  27. True
  28. print(num4.isnumeric())
  29. True
  30.  
  31. #浮点型不能判断
  32. ... num5='4.3'
  33. num6='1/2'
  34. print(num5.isdigit())
  35. False
  36. print(num5.isdecimal())
  37. False
  38. print(num5.isnumeric())
  39. False
  40. print(num6.isdigit())
  41. False
  42. print(num6.isdecimal())
  43. False
  44. print(num6.isnumeric())
  45. False

is其他系列,正确返回True,否则为False

  1. str1='seagull'
  2. str2='seagu123'
  3. print(str1.isalnum()) #判断字符串是否由只由字母和数字或者两者共同组成,是返回True,否则返回False
  4. True
  5. print(str2.isalnum())
  6. True
  7. print(str1.isalpha()) #判断字符串是否只由字母组成,是返回True,否则返回False
  8. True
  9. print(str2.isalpha())
  10. False
  11. str3='a'
  12. str4='1'
  13. print(str3.isidentifier())#判断单词是否为字母,或者是否包含关键字(字母,下划线),是就返回True
  14. True
  15. print(str4.isidentifier())#不能包含的有特殊字符(*,空格,=,数字等,)
  16. False
  17. str1='SEAGUll'
  18. str2='seagu123'
  19. print(str1.islower()) #判断包含的字母是否全部为小写字母,是就返回True
  20. False
  21. print(str2.islower())
  22. True
  23. str1='SEAGUll'
  24. str2='SEAGULL123'
  25. print(str1.isupper())#判断包含字母是否全部是大写,是就返回True
  26. False
  27. print(str2.isupper())
  28. True
  29. str1=' '
  30. str2=''
  31. print(str1.isspace())#判断是否为空格,是就返回True
  32. True
  33. print(str2.isspace())
  34. False
  35. str1='SEAGUll'
  36. str2='Seagull123'
  37. print(str1.istitle())#判断是否为标题(首字母是否大写,单词的首字母大写),如果是就返回True
  38. False
  39. print(str2.istitle())
  40. True

字符串小练习

  1. # 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)
  2. name = " aleX"
  3. # 1) 移除 name 变量对应的值两边的空格,并输出处理结果
  4. print(name.strip())
  5. # 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果
  6. print(name.startswith('al'))
  7. # 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果
  8. print(name.endswith('X'))
  9. # 4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
  10. print(name.replace('l','p'))
  11. # 5) 将 name 变量对应的值根据 “l” 分割,并输出结果。
  12. print(name.split('l'))
  13. # 6) 将 name 变量对应的值变大写,并输出结果
  14. print(name.upper())
  15. # 7) 将 name 变量对应的值变小写,并输出结果
  16. print(name.lower())
  17. # 8) 请输出 name 变量对应的值的第 2 个字符?
  18. print(name[1])
  19. # 9) 请输出 name 变量对应的值的前 3 个字符?
  20. print(name[0:3])
  21. # 10) 请输出 name 变量对应的值的后 2 个字符?
  22. print(name[-2:])
  23. # 11) 请输出 name 变量对应的值中 “e” 所在索引位置?
  24. print(name.find('e'))
  25. print(name.index('e'))
  26. # 12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
  27. print(name[:-1])
  28. print(name.rstrip('X'))
  29. print(name.replace('X',''))
  30. print(name.split('X')[0])

数字(Digit)

包括整数(int),浮点数(float),长整型(long) ,不可变(可hash)

删除数字对象引用

  1. a=1
  2. b=2
  3. c=3
  4. print(a)
  5. 1
  6. del a
  7. print(a) #被删除后再次打印就好报错
  8. Traceback (most recent call last):
  9. File "<stdin>", line 1, in <module>
  10. NameError: name 'a' is not defined

数字类型转换

  1. int(x [,base]) #将x转换为一个整数
  2. float(x ) # 将x转换到一个浮点数
  3. complex(real [,imag]) #创建一个复数
  4. str(x) #将对象x转换为字符串
  5. repr(x) #将对象x转换为表达式字符串
  6. eval(str) #用来计算在字符串中的有效Python表达式,并返回一个对象
  7. tuple(s) #将序列s转换为一个元组
  8. list(s) #将序列s转换为一个列表
  9. chr(x) #将一个整数转换为一个字符
  10. unichr(x) #将一个整数转换为Unicode字符
  11. ord(x) #将一个字符转换为它的整数值
  12. hex(x) #将一个整数转换为一个十六进制字符串
  13. oct(x) #将一个整数转换为一个八进制字符串

数字函数

  1. abs(x) #返回数字的绝对值,如abs(-10) 返回 10
  2. ceil(x) # 返回数字的上入整数,如math.ceil(4.1) 返回 5
  3. cmp(x, y) #如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
  4. exp(x) #返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
  5. fabs(x) #返回数字的绝对值,如math.fabs(-10) 返回10.0
  6. floor(x) #返回数字的下舍整数,如math.floor(4.9)返回 4
  7. log(x) #如math.log(math.e)返回1.0,math.log(100,10)返回2.0
  8. log10(x) #返回以10为基数的x的对数,如math.log10(100)返回 2.0
  9. max(x1, x2,...) # 返回给定参数的最大值,参数可以为序列。
  10. min(x1, x2,...) #返回给定参数的最小值,参数可以为序列。
  11. modf(x) #返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
  12. pow(x, y) x**y #运算后的值。
  13. round(x [,n]) #返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
  14. sqrt(x) #返回数字x的平方根,数字可以为负数,返回类型为实数,如math.sqrt(4)返回 2+0j

列表(List)

可以定义多个变量,有序的,可变(不可hash)类型,

索引

  1. lis=['seagull',18,'eat']
  2. print(lis[0])
  3. seagull
  1. lis=['seagull',18,'eat']
  2. print(lis.index(18))
  3. 1

切片

  1. lis=['seagull',18,'eat']
  2. print(lis[:-1])
  3. ['seagull', 18]

追加

  1. str=['seagull',18]
  2. str.append('eat')
  3. print(str)
  4. ['seagull', 18, 'eat']
  1. str=['seagull',18]
  2. str.extend('eat') #extend将引号里面的字符串分成单个字符,逐个添加,并且只能添加字符串
  3. print(str)
  4. ['seagull', 18, 'e', 'a', 't']
  5. str.extend(['sea','dongdong']) #如果添加列表,需要表明添加的是一个列表
  6. print(str)
  7. ['seagull', 18, 'e', 'a', 't', 'sea', 'dongdong']
  8. str.extend({'hobby':'eat'}) #无法添加字典,但是可以将字典里面的冒号换成逗号添加多个列表
  9. print(str)
  10. ['seagull', 18, 'e', 'a', 't', 'sea', 'dongdong', 'hobby']
  11. str.extend(('lele','honghong')) #小括号的形式添加列表
  12. print(str)
  13. ['seagull', 18, 'e', 'a', 't', 'sea', 'dongdong', 'hobby', 'lele', 'honghong']

删除

  1. str=['seagull', 18, 'e', 'a', 't', 'sea', 'dongdong', 'hobby', 'lele', 'honghong']
  2. str.pop() #索引的方式删除列表数据,不指定默认从右到左开始删除
  3. 'honghong'
  4. print(str)
  5. ['seagull', 18, 'e', 'a', 't', 'sea', 'dongdong', 'hobby', 'lele']
  6. str.pop(0) #指定索引,删除指定删除项
  7. 'seagull'
  8. print(str)
  9. [18, 'e', 'a', 't', 'sea', 'dongdong', 'hobby', 'lele']
  10. str.remove('hobby') #通过指定字符串的方式删除
  11. print(str)
  12. [18, 'e', 'a', 't', 'sea', 'dongdong', 'lele']
  13. str=[] #清空列表
  14. print(str)
  15. []
  16. del str #删除列表
  17. print(str)
  18. <class 'str'>

长度

  1. str=['seagull', 18, 'e', 'a', 't', 'sea', 'dongdong', 'hobby', 'lele', 'honghong']
  2. print(len(str))
  3. 10

循环

  1. str=['seagull', 18, 'e', 'a', 't', 'sea', 'dongdong', 'hobby', 'lele', 'honghong']
  2. for index in range(len(str)): #根据列表的长度进行循环。range,指定范围循环
  3. print(str[index])
  4.  
  5. # range(start,end,step)
  6. # 参数含义:start:计数从start开始,默认从0开始。
  7. # end:计数到end计数,但不包括end。
  8. # step:每次跳跃的间距,默认为1
  9.  
  10. #循环输出结果:
  11. seagull
  12. 18
  13. e
  14. a
  15. t
  16. sea
  17. dongdong
  18. hobby
  19. lele
  20. honghong
  1. str = ['seagull', 'dongdong', 'hobby', 'lele', 'honghong']
  2. for key,v in enumerate(str):
  3. print(key,end=':')
  4. print(v)
  5.  
  6. # enumerate()是python的内置函数
  7. # enumerate在字典上是枚举、列举的意思
  8. # 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
  9. # enumerate多用于在for循环中得到计数
  10.  
  11. #得到的结果:
  12. 0seagull
  13. 1dongdong
  14. 2hobby
  15. 3lele
  16. 4honghong

包含in

  1. str = ['seagull', 'dongdong', 'hobby', 'lele', 'honghong']
  2. if 'seagull' in str:
  3. ... print('ok')
  4. ...
  5. ok

列表排序sort,sorted,reverse

  1. #sort正向排序,直接修改源列表
  2.  
  3. a=[5,4,3,2,1]
  4. a.sort()
  5. print(a)
  6. [1, 2, 3, 4, 5]
  1. #sorted正向排序,可以保留源列表,生成新列表
  2. ... a=[5,4,3,2,1]
  3. b=sorted(a)
  4. print(b)
  5. [1, 2, 3, 4, 5]
  6. #sorted可以用在任何数据类型的序列中,返回的总是一个列表形式
  7. ... b=sorted('iplaypython.com**')
  8. print(b)
  9. ['*', '*', '.', 'a', 'c', 'h', 'i', 'l', 'm', 'n', 'o', 'o', 'p', 'p', 't', 'y', 'y']
  1. #reverse反转排序,直接修改源文件
  2. ... a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  3. a.reverse()
  4. print(a)
  5. [9, 8, 7, 6, 5, 4, 3, 2, 1]
  1. #reversed
  2. a=[5,4,3,2,1]
  3. for i in reversed(a):
  4. print(i)

切片方式的逆转

  1. mystring="54321"
  2. mytuple=(5,4,3,2,1)
  3. mylist=[5,4,3,2,1]
  4. mystring[::-1]
  5. '12345'
  6. mytuple[::-1]
  7. (1, 2, 3, 4, 5)
  8. mylist[::-1]
  9. [1, 2, 3, 4, 5]

小练习

  1. # 有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日赋值给不同的变量
  2. # 模拟队列
  3. # 模拟堆栈
  4.  
  5. data=['alex',49,[1900,3,18]]
  6. sea={'name':data[0],'age':data[1],'data':data[2]}
  7. print(sea)

元组(Tuple)

用来存储多个值,有序的,不可变(可哈希) 类型,可以当做字典的key值。

索引

  1. sea=('seagull',18,'eat')
  2. print(sea[0])
  3. seagull
  4. print(sea.index('seagull'))
  5. 0

切片

  1. sea = ('seagull', 18, 'eat')
  2. print(sea[:-1])

循环

  1. sea = ('seagull', 18, 'eat')
  2. for tuple in sea:
  3. print(tuple)

长度

  1. sea = ('seagull', 18, 'eat')
  2. print(len(sea))
  3. 3

包含in

  1. sea = ('seagull', 18, 'eat')
  2. if 'seagull' in sea:
  3. print('ok')

小练习

  1. #简单购物车:实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入  
  2. #升级要求
  3. # 要求用户输入总资产,例如:2000
  4. # 显示商品列表,让用户根据序号选择商品,加入购物车
  5. # 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
  6. # 附加:可充值、某商品移除购物车
  7.  
  8. msg_dic={
  9. 'apple':10,
  10. 'tesla':100000,
  11. 'mac':3000,
  12. 'lenovo':30000,
  13. 'chicken':10,
  14. }

集合(Set)

去重,关系运算。无序,不可变(可hash)类型,可以作为字典的key,主要是不同的集合直接做关系运算。

存储 | 移除除

  1. sea={'seagull','lele'}
  2. sea.add('dongdong')
  3. print(sea)
  4. sea.pop() #任意删除
  5. print(sea)
  6. sea.remove('lele') #指定删除
  7. print(sea)

in 和 not in

  1. sea={'seagull','lele',18,'eat'}
  2. if 'lele' in sea:
  3. print('ok')
  4. if 'dong' not in sea:
  5. print('ok')

|  合集(union)

  1. a={1,2,4,5,10}
  2. b={3,4,7,8,10}
  3. print(a|b)
  4. {1, 2, 3, 4, 5, 7, 8, 10}
  5. print(a.union(b))
  6. {1, 2, 3, 4, 5, 7, 8, 10}

&  交集(intersection)

  1. a={1,2,4,5,10}
  2. b={3,4,7,8,10}
  3. print(a&b)
  4. {10, 4}
  5. print(a.intersection(b))
  6. {10, 4}

-  差集

  1. a={1,2,4,5,10}
  2. b={3,4,7,8,10}
  3. print(a-b)
  4. {1, 2, 5}
  5. print(a.difference(b))
  6. {1, 2, 5}

^  对称差集

  1. a={1,2,4,5,10}
  2. b={3,4,7,8,10}
  3. print(a^b)
  4. {1, 2, 3, 5, 7, 8}
  5. print(a.symmetric_difference(b))
  6. {1, 2, 3, 5, 7, 8}

==  判断两个集合是否相等,返回布尔值

  1. a={1,2,4,5,10}
  2. b={3,4,7,8,10}
  3. print(a==b)
  4. False

>,>= ,<,<=   父集,子集(判断其中一个集合的元素是否均包含于另一个元素,返回布尔值)

  1. a={1,2,3,4,5}
  2. b={4,5}
  3. print(a>b)
  4. True
  5. print(a>=b)
  6. True
  7. print(a.issuperset(b))#a是否包含于b
  8. True
  9.  
  10. print(a<b)
  11. False
  12. print(a<=b)
  13. False
  14. print(a.issubset(b))
  15. False

小练习:

  1. #  一.关系运算
  2. #   有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  3. pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
  4. linuxs={'wupeiqi','oldboy','gangdan'}
  5. #   1. 求出即报名python又报名linux课程的学员名字集合
  6. print(pythons&linuxs)
  7. print(pythons.intersection(linuxs))
  8. #   2. 求出所有报名的学生名字集合
  9. print(pythons|linuxs)
  10. print(pythons.union(linuxs))
  11. #   3. 求出只报名python课程的学员名字
  12. print(pythons-linuxs)
  13. print(pythons.difference(linuxs))
  14. #   4. 求出没有同时这两门课程的学员名字集合
  15. print(pythons^linuxs)
  16. print(pythons.symmetric_difference(linuxs))
  1. # 二.去重
  2. #
  3. #    1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序
  4. l=['a','b',1,'a','a']
  5. print(set(l))
  6. #    2.在上题的基础上,保存列表原来的顺序
  7. l=['a','b',1,'a','a']
  8. sea=[]
  9. for list in l:
  10. if list not in sea:
  11. sea.append(list)
  12. print(sea)
  13. #或者
  14. l=['a','b',1,'a','a']
  15. sea=[]
  16. sea1=set()
  17. for list in l:
  18. if list not in sea:
  19. sea1.add(list)
  20. sea.append(list)
  21. print(sea)
  22.  
  23. #    3.去除文件中重复的行,肯定要保持文件内容的顺序不变
  24. import os
  25. with open('sea.txt','r',encoding='utf-8') as read_f,\
  26. open('.sea.txt.swap','w',encoding='utf-8') as write_f:
  27. s=set()
  28. for line in read_f:
  29. if line not in s:
  30. s.add(line)
  31. write_f.write(line)
  32. os.remove('sea.txt')
  33. os.rename('.sea.txt.swap','sea.txt')
  34. #    4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序
  35.  
  36. l=[
  37. {'name':'egon','age':18,'sex':'male'},
  38. {'name':'alex','age':73,'sex':'male'},
  39. {'name':'egon','age':20,'sex':'female'},
  40. {'name':'egon','age':18,'sex':'male'},
  41. {'name':'egon','age':18,'sex':'male'},
  42. ]
  43. sea=[]
  44. for list in l:
  45. if list not in sea:
  46. sea.append(list)
  47. print(sea)
  48. #或者
  49. s=set()
  50. l1=[]
  51. for item in l:
  52. val=(item['name'],item['age'],item['sex'])
  53. if val not in s:
  54. s.add(val)
  55. l1.append(item)
  56.  
  57. print(l1)

字典(Dict)

存储多个值,存在key值和value值,可变(不可hash)类型,需要注意的是,字典的key值是不可变的。

存/取

  1. sea={}
  2. sea['name']='seagull'
  3. print(sea)
  4. print(sea['name'])

删除

  1. sea={'name':'seagull','age':18,'hobby':'eat'}
  2. sea.pop('name')
  3. 'seagull'
  4. print(sea)
  5. {'age': 18, 'hobby': 'eat'}

长度

  1. sea={'name':'seagull','age':18,'hobby':'eat'}
  2. print(len(sea))
  3. 3

循环

  1. sea={'name':'seagull','age':18,'hobby':'eat'}
  2. for key in sea:
  3. print(key)
  4. for values in sea.values():
  5. print(values)
  6. for item in sea.items():
  7. print(item)

小练习

  1. # 1 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。(2分)
  2. #
  3. #   即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
  4. sea1=[11,22,33,44,55,66,77,88,99,90]
  5. sea2={'key1':[],'key2':[]}
  6. for list in sea1:
  7. if list > 66:
  8. sea2['key1'].append(list)
  9. elif list < 66:
  10. sea2['key2'].append(list)
  11. else:
  12. continue
  13. print(sea2)
  1. #  2 统计s='hello alex alex say hello sb sb'中每个单词的个数
  2. #
  3. #   结果如:{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}
  4.  
  5. s='hello alex alex say hello sb sb'
  6. sea={}
  7. for dic in s.split():
  8. if dic in sea:
  9. sea[dic]+=1
  10. else:
  11. sea[dic]=1
  12. print(sea)

布尔(bool)

布尔型只有两个值,True或者False

你能够将Ture和False看作是预定义的设置为整数1和整数0的变量

  1. True +4
  2. 5
  3. a=True
  4. a
  5. True
  6. True == 1
  7. True
  8. False == 0
  9. True

Python文件处理

python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。

  1. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
  2.  
  3. 返回指定目录下的所有文件和目录名:os.listdir()
  4.  
  5. 函数用来删除一个文件:os.remove()
  6.  
  7. 删除多个目录:os.removedirsrc\python”)
  8.  
  9. 检验给出的路径是否是一个文件:os.path.isfile()
  10.  
  11. 检验给出的路径是否是一个目录:os.path.isdir()
  12.  
  13. 判断是否是绝对路径:os.path.isabs()
  14.  
  15. 检验给出的路径是否真地存:os.path.exists()
  16.  
  17. 返回一个路径的目录名和文件名:os.path.split() eg os.path.split('/home/swaroop/byte/code/poem.txt') 结果:('/home/swaroop/byte/code', 'poem.txt')
  18.  
  19. 分离扩展名:os.path.splitext()
  20.  
  21. 获取路径名:os.path.dirname()
  22.  
  23. 获取文件名:os.path.basename()
  24.  
  25. 运行shell命令: os.system()
  26.  
  27. 读取和设置环境变量:os.getenv() os.putenv()
  28.  
  29. 给出当前平台使用的行终止符:os.linesep Windows使用'\r\n'Linux使用'\n'Mac使用'\r'
  30.  
  31. 指示你正在使用的平台:os.name 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'
  32.  
  33. 重命名:os.renameold new
  34.  
  35. 创建多级目录:os.makedirsrc\python\test”)
  36.  
  37. 创建单个目录:os.mkdir(“test”)
  38.  
  39. 获取文件属性:os.statfile
  40.  
  41. 修改文件权限与时间戳:os.chmodfile
  42.  
  43. 终止当前进程:os.exit()
  44.  
  45. 获取文件大小:os.path.getsizefilename

文件操作

  1. os.mknod("test.txt") 创建空文件
  2. fp = open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件
  3.  
  4. 关于open 模式:
  5.  
  6. w 以写方式打开,
  7. a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
  8. r+ 以读写模式打开
  9. w+ 以读写模式打开 (参见 w )
  10. a+ 以读写模式打开 (参见 a )
  11. rb 以二进制读模式打开
  12. wb 以二进制写模式打开 (参见 w )
  13. ab 以二进制追加模式打开 (参见 a )
  14. rb+ 以二进制读写模式打开 (参见 r+ )
  15. wb+ 以二进制读写模式打开 (参见 w+ )
  16. ab+ 以二进制读写模式打开 (参见 a+ )
  1. fp.read([size]) #size为读取的长度,以byte为单位
  2.  
  3. fp.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分
  4.  
  5. fp.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
  6.  
  7. fp.write(str) #把str写到文件中,write()并不会在str后加上一个换行符
  8.  
  9. fp.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
  10.  
  11. fp.close() #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError
  12.  
  13. fp.flush() #把缓冲区的内容写入硬盘
  14.  
  15. fp.fileno() #返回一个长整型的”文件标签“
  16.  
  17. fp.isatty() #文件是否是一个终端设备文件(unix系统中的)
  18.  
  19. fp.tell() #返回文件操作标记的当前位置,以文件的开头为原点
  20.  
  21. fp.next() #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
  22.  
  23. fp.seek(offset[,whence]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
  24.  
  25. fp.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

目录操作

  1. os.mkdir("file") 创建目录
  2. 复制文件:
  3. shutil.copyfile("oldfile","newfile") oldfilenewfile都只能是文件
  4. shutil.copy("oldfile","newfile") oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
  5. 复制文件夹:
  6. shutil.copytree("olddir","newdir") olddirnewdir都只能是目录,且newdir必须不存在
  7. 重命名文件(目录)
  8. os.rename("oldname","newname") 文件或目录都是使用这条命令
  9. 移动文件(目录)
  10. shutil.move("oldpos","newpos")
  11. 删除文件
  12. os.remove("file")
  13. 删除目录
  14. os.rmdir("dir")只能删除空目录
  15. shutil.rmtree("dir") 空目录、有内容的目录都可以删
  16. 转换目录
  17. os.chdir("path") 换路径

实例小练习

  1. # 文件a.txt内容:每一行内容分别为商品名字,价钱,个数,求出本次购物花费的总钱数
  2. # apple 10 3
  3. # tesla 100000 1
  4. # mac 3000 2
  5. # lenovo 30000 3
  6. # chicken 10 3
  7. import fileinput
  8. count=0
  9. file=fileinput.input('sea.txt')
  10. print('本次购买的商品信息:')
  11. for content in file:
  12. print(content,end="")
  13. content=list(content.split())
  14. count=int(content[1]) * int(content[2])+count
  15. price=count
  16. print('\n商品总额是:{}'.format(price))
  1. # 修改文件内容,把文件中的alex都替换成SB
  2. # i am seagull,
  3. # seagull is a looker.
  4. # and alex is a killer.
  5.  
  6. with open('sea.txt','r') as r:
  7. lines=r.readlines() #按行读取文件
  8. with open('sea.txt','w') as w:
  9. for l in lines:
  10. w.write(l.replace('alex','sb'))

忘羡一

初进python世界之数据类型的更多相关文章

  1. 飞跃式发展的后现代 Python 世界

    飞跃式发展的后现代Python世界 如果现代Python有一个标志性特性,那么简单说来便是Python对自身定义的越来越模糊.在过去的几年的许多项目都极大拓展了Python,并重建了“Python”本 ...

  2. python-字符编码、字符串格式化、进制转化、数据类型、列表、元组、字典总结

    目录: 一.字符编码 二.字符串格式化 三.进制转换 四.数据类型及其操作 五.字符串转换 六.列表 七.元组 八.字典 一.字符编码: 计算机由美国人发明,最早的字符编码为ASCII,只规定了英文字 ...

  3. python学习6—数据类型之集合与字符串格式化

    python学习6—数据类型之集合与字符串格式化 1. 使用id()可以查看一个变量的内存地址: name = 'alex' id(name) 2. 进制转换 十进制转换为二进制等: a = 10 # ...

  4. python的组合数据类型及其内置方法说明

    python中,数据结构是通过某种方式(例如对元素进行编号),组织在一起数据结构的集合. python常用的组合数据类型有:序列类型,集合类型和映射类型 在序列类型中,又可以分为列表和元组,字符串也属 ...

  5. 第一节 Python基础之数据类型(整型,布尔值,字符串)

    数据类型是每一种语言的基础,就比如说一支笔,它的墨有可能是红色,有可能是黑色,也有可能是黄色等等,这不同的颜色就会被人用在不同的场景.Python中的数据类型也是一样,比如说我们要描述一个人的年龄:小 ...

  6. Python 3 mysql 数据类型

    Python 3 mysql 数据类型 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/m ...

  7. python day2:python的基本数据类型及其方法

    目录 python day2 1. 编码转换 2. python的基本数据类型 3. for 迭代遍历 4. 列表list 5. 元组tuple 6. 字典dict 7. 枚举enumerate 8. ...

  8. python学习之数据类型(List)

    3.5 列表 3.5.1 列表的介绍 ​ 列表是python的基础数据类型之⼀,其他编程语言也有类似的数据类型. 比如JS中的数组, java中的数组等等.它是以[ ]括起来, 每个元素⽤' , '隔 ...

  9. Python 入门之数据类型之间的相互转换 以及 在编程中会遇到的数据类型的坑

    Python 入门之数据类型之间的相互转换 以及 在编程中会遇到的数据类型的坑 1.数据类型总结: 可变,不可变,有序,无序 (1)可变的数据类型:list dict set (2)不可变的数据类型: ...

随机推荐

  1. Qt编译出错 GL/gl.h:No such file or directory

    系统:Ubuntu18.04 软件:QtCreator4.8 Qt5.9.8 编译Qt Widgets Application类型的项目时,出现错误,提示: GL/gl.h: No such file ...

  2. Python标准库-数字的处理函数(math模块)

    Python标准库-数字的处理函数(math模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. #!/usr/bin/env python #_*_conding:utf-8_* ...

  3. Python入门篇-匿名函数

    Python入门篇-匿名函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.匿名函数概述 1>.什么是匿名函数 匿名,即没有名字 匿名函数,即没有名字的函数 2>. ...

  4. Linux TTY函数跟踪

    1. 介绍 本文介绍了TTY打开.TTY读和TTY写操作的函数跟踪过程 2. 示例 下面是一个简单的Linux TTY打开和读写过程 #include <termios.h> #inclu ...

  5. 通俗理解word2vec的训练过程

    https://www.leiphone.com/news/201706/eV8j3Nu8SMqGBnQB.html https://blog.csdn.net/dn_mug/article/deta ...

  6. Thinkphp3.2下导入所需的类库 同java的Import 本函数有缓存功能

    * 导入所需的类库 同java的Import 本函数有缓存功能 * @param string $class 类库命名空间字符串 * @param string $baseUrl 起始路径 * @pa ...

  7. Python开发应用-正则表达进行排序搜索

    re模块提供了3个方法对输入的字符串进行确切的查询,match和search最多只会返回一个匹配条件的子串,可以理解为非贪婪模式,而findall会返回N个匹配条件的子串,可以理解为贪婪模式 re.m ...

  8. less-4

    首先来了解语句构造方法: 输入id=1’显示正确,输入id=1”显示错误(如下图),可以看到后面有个),说明这里跟前面less-3一样,也是用)来闭合,只不过这里从单引号变成了双引号 输入id=1”) ...

  9. test20190904 JKlover

    100+100+100=300.最后十分钟极限翻盘. 树链剖分 给一棵以1为根的有根树,开始只有1有标记. 每次操作可以给某个点打上标记,或者询问从某个点开始向上跳,遇到的第一个有标记的点. 对于 1 ...

  10. dimensionality reduction动机---data compression(使算法提速)

    data compression可以使数据占用更少的空间,并且能使算法提速 什么是dimensionality reduction(维数约简)    例1:比如说我们有一些数据,它有很多很多的feat ...