Python初识day2

Stella981
• 阅读 665

本节内容:

  1. 列表、元组操作
  2. 字符串操作
  3. 字典操作
  4. 集合操作
  5. 文件操作

一、列表、元组操作

1. 列表: 列表是我们使用频率最高的数据类型之一,由一个中括号 [ ]括起来,里面的值可以是任何类型(也可以是一个列表)。

  列表的创建: 

  names = ['Island' , 'zhuzhu', 'zhu']

  列表的主要使用方法有:增、删、改、查。

  增:

zhu = ['a', 'b', 'c', 1, 2, [3, 'd']]
zhu1 = ['e', 'fg']
zhu.append('a zhu')  #第一种方法——.append()括号内加上所要加的内容,默认加到最后一位。
print(zhu)  #结果:['a', 'b', 'c', 1, 2, [3, 'd'], 'a zhu']

zhu.insert(2, 'azhu')  #第二种方法——.insert() 在第2个位置前强行加入需要的内容
print(zhu)  #结果:['a', 'b', 'azhu', 'c', 1, 2, [3, 'd'], 'a zhu']

zhu.extend(zhu1)  #第三种方法——.extend()在zhu列表的后边扩展zhu1
print(zhu)  #结果:['a', 'b', 'azhu', 'c', 1, 2, [3, 'd'], 'a zhu', 'e', 'fg']

  删:

zhu = ['a', 'b', 'c', 1, 2, [3, 'd']]
zhu.remove('c')  #删除指定元素
print(zhu)  #结果:['a', 'b', 1, 2, [3, 'd']]

del zhu[0]  #利用索引值删除指定元素
print(zhu)  #结果:['b', 1, 2, [3, 'd']]

zhu.pop() #删除列表最后一个值
print(zhu)  #结果:['b', 1, 2]

  改:

zhu = ['a', 'b', 'c', 1, 2, [3, 'd']]

zhu[3] = '变'  #利用索引值修改
print(zhu)  #结果:['a', 'b', 'c', '变', 2, [3, 'd']]

  查:

zhu = ['a', 'b', 'c', 1, 2, [3, 'd']]

print('zhu[1]:', zhu[1], '\nzhu[-1]:', zhu[-1])  #:利用索引值查找,索引值为负时表示倒数第n个 (\n为换行)
#结果:zhu[1]: b 
#     zhu[-1]: [3, 'd']

  统计:

zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5']
print(zhu.count('a'))  #统计元素个数
  #结果:2

  获取下标:

zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5']
print(zhu.index('a'))  #获取下标 默认从左到右搜索找到的第一个元素,获取他的下标
  #结果:0
print(zhu.index('a',2))  #获取第二个'a'的下标
  #结果:6

排序和反转:

# zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5']
# zhu.sort()
# 结果:
# Traceback (most recent call last):
#   File "C:/Users/48316/PycharmProjects/untitled1/zhu1/text_.py", line 2, in <module>
#     zhu.sort()
# TypeError: unorderable types: int() < str()  py3之后不同的数据类型不能排序
zhu = ['a', 'b', 'c', '1', '2', 'a', '2', '5']
zhu.sort()  #按照ASCII码排序
print(zhu)  #结果['1', '2', '2', '5', 'a', 'a', 'b', 'c']
zhu.reverse()  #反转
print(zhu)  #结果['c', 'b', 'a', 'a', '5', '2', '2', '1']

2.元组:元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表。它只有2个方法,一个是count,一个是index,完毕。

    语法:

zhu = ('a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5')  #和列表基本类似 只是用圆括号括起来
print(zhu)   #结果:('a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5')

二、字符串操作

特性:不可修改。

各种操作:

#_author: "a zhu"
#_date: 2018/2/1

str='abcd EFGH ijk'  #直接创建字符串  用引号括起来

print(str.upper())  #将字符串内所有的字符大写
#结果:ABCD EFGH IJK

print(str.casefold())#将字符串内所有的字符小写
#结果:abcd efgh ijk

print(str.capitalize())#将字符串首字母大写
#结果:Abcd efgh ijk

print(str.count(' '))  #统计字符‘ ’出现次数
#结果:2

print(str.endswith('jk'))#判断字符串是否以'jk'结尾
#结果:True

print(str.center(30,'-'))  #给字符串两边加上'-',一共30个
#结果:--------abcd EFGH ijk---------

print(str.find(' '))  #找到字符' '的索引值,找不到返回-1
#结果:4


msg = "my name is {}, and age is {}."
print(msg.format('飞天zhuzhuxia','19'))
#结果:my name is 飞天zhuzhuxia, and age is 19.

msg = "my name is {1}, and age is {0}."
print(msg.format('飞天zhuzhuxia','19'))
#结果:my name is 19, and age is 飞天zhuzhuxia.

msg = "my name is {name}, and age is {age}."
print(msg.format(age='19', name='飞天zhuzhuxia'))
#结果:my name is 飞天zhuzhuxia, and age is 19.

print(msg.partition('is'))  #从'is'出断开 变为三个元素组成的元组
#结果:('my name ', 'is', ' {name}, and age is {age}.')

print(str.ljust(20,'-'))
#结果:abcd EFGH ijk-------

print(str.rjust(20,'-'))
#结果:-------abcd EFGH ijk

三、字典操作

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

字典的特性:

  • dict是无序的
  • key必须是唯一的,so 天生去重

字典的创建:

dict ={
    'shannxi': 'xian',
    'sichuan': 'chengdou',
    'hunan': 'zhengzhou',
    'shanxi': 'taiyuan',
    'beijing': 'sanlitun'
}     #字典由一对一对的键值对组成

  字典的增、删、改、查:

增加:

dict['shanghai'] = '东方明珠'#直接输入新的键值,给简直赋值就可增加
print(dict)
#结果:{'shanxi': 'taiyuan', 'hunan': 'zhengzhou', 'sichuan': 'chengdou', 'shannxi': 'xian', 'shanghai': '东方明珠', 'beijing': 'sanlitun'}

     删除:

dict.pop('shanxi')
print(dict)
#结果:{'sichuan': 'chengdou', 'beijing': 'sanlitun', 'shannxi': 'xian', 'hunan': 'zhengzhou'}
del dict['sichuan']
print(dict)
#结果:{'beijing': 'sanlitun', 'shannxi': 'xian', 'hunan': 'zhengzhou'}
dict.popitem()#随机删除
print(dict)
#结果:{'beijing': 'sanlitun', 'hunan': 'zhengzhou'}

    修改:

dict['beijing'] = 'chaoyang'  #利用键值进行修改
print(dict)  #结果:{'beijing': 'chaoyang', 'hunan': 'zhengzhou', 'sichuan': 'chengdou', 'shanxi': 'taiyuan', 'shannxi': 'xian'}

查看:

print(dict['shanxi']) #利用键值可以查看  但是如果没有该键值就会报错
#结果:taiyuan
print(dict.get('sichuan1'))#这样就不会报错  如果没有就会返回None

其他:

print(dict.values())
#结果:dict_values(['xian', 'zhengzhou', 'chengdou', 'taiyuan', 'sanlitun'])
print(dict.keys())
#结果:dict_keys(['beijing', 'hunan', 'sichuan', 'shanxi', 'shannxi'])

b = {1: 2, 3: 4}
dict.update(b)
print(dict)
#结果:{1: 2, 'sichuan': 'chengdou', 3: 4, 'shanxi': 'taiyuan', 'hunan': 'zhengzhou', 'shannxi': 'xian', 'beijing': 'sanlitun'}

    循环dict:

for key in dict:
    print(key,dict[key])
'''hunan zhengzhou
shannxi xian
beijing sanlitun
shanxi taiyuan
sichuan chengdou'''
for k,v in dict.items(): #会先把dict转成list,数据里大时莫用
    print(k,v)
'''hunan zhengzhou
shannxi xian
shanxi taiyuan
beijing sanlitun
sichuan chengdou'''

四、集合操作

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

各种使用方法:

s = set([3, 5, 9, 10])  # 创建一个数值集合

t = set("Hello")  # 创建一个唯一字符的集合

t.add('c')  #添加元素
print(t)  #结果:{'H', 'c', 'e', 'l', 'o'}

s.update([10,37,42])  # 在s中添加多项
print(s)  #结果:{3, 37, 5, 9, 10, 42}

t.remove('H') #删除指定元素
print(t)  #结果:{'c', 'e', 'l', 'o'}

print(len(s))  #set的长度
#结果:6

print('x' in s)  #测试x是否是s的成员
#结果:False
print('x' not in s ) #测试x是否不是s的成员
#结果:True
print(s.issubset(t))  #结果:False
#s <= t  测试是否s中的每一个元素都在t中

print(s.issuperset(t))#结果:False
#s >= t  #测试是否t中的每一个元素都在s中

print(s.union(t))  #结果:{'e', 3, 42, 37, 5, 'l', 'c', 9, 10, 'o'}
#s | t  返回一个新的set包含s和t中的每一个元素

print(s.intersection(t))#结果:set()
#s & t  返回一个新的set包含s和t中的公共元素

print(s.difference(t))#结果:{3, 5, 37, 9, 10, 42}
#s - t  返回一个新的set包含s中有但是t中没有的元素

print(s.symmetric_difference(t))#结果:{'l', 3, 37, 5, 9, 10, 42, 'e', 'c', 'o'}
#s ^ t  返回一个新的set包含s和t中不重复的元素

五、文件操作

对文件操作流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件

 

现在有一个word文件如下:

  纤云弄巧,飞星传恨,银汉迢迢暗度。

  金风玉露一相逢,便胜却人间无数。

  柔情似水,佳期如梦,忍顾鹊桥归路。

  两情若是久长时,又岂在朝朝暮暮。

f = open('鹊桥仙') #打开文件
data=f.read()#获取文件内容
f.close() #关闭文件

   注意 if in the win,hello文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统

默认的是gbk编码,所以直接打开会乱码,需要f=open('hello',encoding='utf8'),hello文件如果是gbk保存的,则直接打开即可。

三种最基本的文件打开模式:

# f = open('鹊桥仙2','r') #打开文件  只读
# f = open('鹊桥仙2','w') #打开文件  只写
# f = open('鹊桥仙2','a') #打开文件  追加
#如果系统找不到要打开的文件名,则会创建一个文件。

集体操作:

f = open('鹊桥仙') #打开文件
# data1=f.read()#获取文件内容
# data2=f.read()#获取文件内容
#
# print(data1)
# print('...',data2)
# data=f.read(5)#获取文件内容
 
# data=f.readline()
# data=f.readline()
# print(f.__iter__().__next__())
# for i in range(5):
#     print(f.readline())
 
# data=f.readlines()
 
# for line in f.readlines():
#     print(line)
 
 
# 问题来了:打印所有行,另外第3行后面加上:'end 3'
# for index,line in enumerate(f.readlines()):
#     if index==2:
#         line=''.join([line.strip(),'end 3'])
#     print(line.strip())
 
#切记:以后我们一定都用下面这种
# count=0
# for line in f:
#     if count==3:
#         line=''.join([line.strip(),'end 3'])
#     print(line.strip())
#     count+=1
 
# print(f.tell())
# print(f.readline())
# print(f.tell())#tell对于英文字符就是占一个,中文字符占三个,区分与read()的不同.
# print(f.read(5))#一个中文占三个字符
# print(f.tell())
# f.seek(0)
# print(f.read(6))#read后不管是中文字符还是英文字符,都统一算一个单位,read(6),此刻就读了6个中文字符
 
#terminal上操作:
f = open('鹊桥仙2','w')
# f.write('hello \n')
# f.flush()
# f.write('world')
 
# 应用:进度条
# import time,sys
# for i in range(30):
#     sys.stdout.write("*")
#     # sys.stdout.flush()
#     time.sleep(0.1)
 
 
# f = open('鹊桥仙2','w')
# f.truncate()#全部截断
# f.truncate(5)#全部截断
 
 
# print(f.isatty())
# print(f.seekable())
# print(f.readable())
 
f.close() #关闭文件

其他的文件模式:

# f = open('鹊桥仙2','w') #打开文件
# f = open('鹊桥仙2','a') #打开文件
# f.write('莫等闲1\n')
# f.write('白了少年头2\n')
# f.write('空悲切!3')
 
 
# f.close()
 
#r+,w+模式
# f = open('鹊桥仙2','r+') #以读写模式打开文件
# print(f.read(5))#可读
# f.write('hello')
# print('------')
# print(f.read())
 
 
# f = open('鹊桥仙2','w+') #以写读模式打开文件
# print(f.read(5))#什么都没有,因为先格式化了文本
# f.write('hello alex')
# print(f.read())#还是read不到
# f.seek(0)
# print(f.read())
 
#w+与a+的区别在于是否在开始覆盖整个文件
 
 
# ok,重点来了,我要给文本第三行后面加一行内容:'hello 岳飞!'
# 大家会说,前面不是做过修改了吗? 大哥,刚才是修改内容后print,现在是对文件进行修改!!!
# f = open('鹊桥仙2','r+') #以写读模式打开文件
# f.readline()
# f.readline()
# f.readline()
# print(f.tell())
# f.write('hello 岳飞')
# f.close()
# 和想的不一样,不管事!那涉及到文件修改怎么办呢?
 
# f_read = open('小重山','r') #以写读模式打开文件
# f_write = open('小重山_back','w') #以写读模式打开文件
 
# count=0
# for line in f_read:
    # if count==3:
    #     f_write.write('hello,岳飞\n')
    #
    # else:
    #     f_write.write(line)
 
 
    # another way:
    # if count==3:
    #
    #     line='hello,岳飞2\n'
    # f_write.write(line)
    # count+=1

文件操作还有许多小点就不一一列举了。



 面试题小分享:

11.python的最大递归层数是多少?

999

12.求结果

v1 = 1 or 3
#v1=1
    v2 = 1 and 3
#v2=3
    v3 = 0 and 2 and 1    #v3 = 0

v4 = 0 and 2 or 1    #v4 = 1

v5 = 0 and 2 or 1 or 4    #v5 = 1

v6 = 0 or Flase and 1     #v6=0#a=10 b=20

and

x and y

布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。

(a and b) 返回 20。

or

x or y

布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。

(a or b) 返回 10。

not

not x

布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。

not(a and b) 返回 False

#python具体的运算符的用法请参考:http://www.runoob.com/python/python-operators.html

13.ascii、unicode、utf-8、gbk的区别?

简单说一下吧:
ascii 是最早美国用的标准信息交换码,把所有的字母的大小写,各种符号用 二进制来表示,共有256中,加入些拉丁文等字符,1bytes代表一个字符,

Unicode是为了统一世界各国语言的不用,统一用2个bytes代表一个字符,可以表达2**16=65556个,称为万国语言,特点:速度快,但浪费空间,可以用在内存处理中,兼容了utf-8,gbk,ASCII,

utf-8 为了改变Unicode的这种缺点,规定1个英文字符用1个字节表示,1个中文字符用3个字节表示,特点;节省空间,速度慢,用在硬盘数据传输,网络数据传输,相比硬盘和网络速度,体现不出来的,

gbk  是中文的字符编码,用2个字节代表一个字符,

14.字节码和机器码的区别?

Python初识day2 Python初识day2

简单来说:
机器码:是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,也比较难编写,一般从业人员接触不到。
字节码:是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。

View Code

15.三元运算规则以及应用场景?

Python初识day2 Python初识day2

#先说下三元运算符的表达式:
#为真时的结果 if 判定条件 else 为假时的结果
#事例
1 if 3>2 else 0  #输出:1

View Code

16.列举 Python2和Python3的区别?

1.print 函数
2.Unicode
3.除法运算
4.异常处理
5.xrange
6.不等运算符
7.去掉了repr表达式
8.多个模块被改名(根据PEP8)
9.数据类型
详细请看:http://www.runoob.com/python/python-2x-3x.html  或者:https://www.cnblogs.com/weikunzz/p/6857971.html

17.用一行代码实现数值交换:a=1  ,   b=2

a, b  = b, a

18.Python3和Python2中 int 和 long的区别?

int(符号整数):通常被称为是整数或整数,没有小数点的正或负整数。
long(长整数):或渴望,无限大小的整数,这样写整数和一个大写或小写的L。
float(浮点实际值):彩车,代表实数,小数除以整数部分和小数部分的书面。花车也可能是在科学记数法与E或指示的10次方é(2.5e2= 2.5×102=250)。
complex  (复数):+ BJ的形式,其中a,b是彩车和J(或J)表示-1的平方根(这是一个虚数)。 a是真正的数字部分,b是虚部。复数不使用Python编程。

19.xrange和range的区别?

Python初识day2 Python初识day2

#range 
#函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个列表。
#eg: 
 range(10)
#输出[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 range(2,10)
#输出[2, 3, 4, 5, 6, 7, 8, 9]
 range(2,10,2)
#输出[2, 4, 6, 8]
 type(_)
#输出<type 'list'>




#xrange 
#函数说明:和range 的用法完全相同,但是返回的是一个生成器。 
#eg:
 xrange(10)
#输出xrange(10)
xrange(2,10)
#输出xrange(2, 10)
xrange(2,10,2)
#输出xrange(2, 10, 2)
type(_)
#输出<type 'xrange'>
list(xrange(2, 10, 2))
#输出[2, 4, 6, 8] 

#但是要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间,这两个基本上都是在循环的时候用。

View Code

20.文件操作时:xreadlines和readlines的区别?

Python初识day2 Python初识day2

* readline() >> reads a single line from file with newline at the end。

   readline()读取一行内容,放到一个字符串变量,返回str类型。

* readlines() >> returns a list containing all the lines in the file

readlines() 读取文件所有内容,按行为单位放到一个列表中,返回list类型。

* xreadlines() >> Returns a generator to loop over every single line in the file

  返回一个生成器,来循环操作文件的每一行。循环使用时和readlines基本一样,但是直接打印就不同

View Code

n

x and y

布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。

(a and b) 返回 20。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这