python学习-基础-day2

一、PYC文件

python首次执行某个文件,会生成一个pyc的编译文件,下次执行的时候首先会找是否有pyc文件,再检查文件日期,这样会减少编译时间

二、模块

import 模块名

现在当前文件路径下找模块名,再在python的环境变量里面找

安装第三方模块,默认会安装在$python3.5\Lib\site-packages目录里

在win上用pip命令安装报错:unable to create process using ‘‘‘‘

百度了下:python -m pip install 模块文件

三、字符编码与转码(copy alex的)

详细文章:

http://www.cnblogs.com/yuanchenqi/articles/5956943.html

http://www.diveintopython3.net/strings.html

需知:

1.在python2默认编码是ASCII, python3里默认是unicode

2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

上图仅适用于py2

 1 #-*-coding:utf-8-*-
 2 __author__ = ‘Alex Li‘
 3
 4 import sys
 5 print(sys.getdefaultencoding())
 6
 7
 8 msg = "我爱北京天安门"
 9 msg_gb2312 = msg.decode("utf-8").encode("gb2312")
10 gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk")
11
12 print(msg)
13 print(msg_gb2312)
14 print(gb2312_to_gbk)
15
16 in python2

#-*-coding:gb2312 -*-   #这个也可以去掉
__author__ = ‘Alex Li‘

import sys
print(sys.getdefaultencoding())

msg = "我爱北京天安门"
#msg_gb2312 = msg.decode("utf-8").encode("gb2312")
msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔
gb2312_to_unicode = msg_gb2312.decode("gb2312")
gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8")

print(msg)
print(msg_gb2312)
print(gb2312_to_unicode)
print(gb2312_to_utf8)

in python3

python3

四,列表

1,列表中允许存在相同的元素

可以用.count("name")去查看你

如:

list1 = [1,2,3,4,1,2,5,]print(list1)print(list1.count(2))

输出:

2,copy

2.1列表1 = 列表(因为我犯过这个错误,列表中不要些这种)
names = [‘cui‘,‘wang‘,‘luo‘,‘zhang‘,‘xu‘]print(names)names_1 = namesprint(names_1)names[1] = ‘zhao‘print(names)print(names_1)print(id(names))print(id(names_1))

输出为:

[‘cui‘, ‘wang‘, ‘luo‘, ‘zhang‘, ‘xu‘]
[‘cui‘, ‘wang‘, ‘luo‘, ‘zhang‘, ‘xu‘]
[‘cui‘, ‘zhao‘, ‘luo‘, ‘zhang‘, ‘xu‘]
[‘cui‘, ‘zhao‘, ‘luo‘, ‘zhang‘, ‘xu‘]

 11928968
 11928968

可以看到如果列表采用c = a, a= b,b = c,这种a,b互换值是不行的,列表1 =列表2 仅仅只是复制了对对象的引用,即 names 和 names_1 指向的是同一个对象,所以如果改变了该对象的元素的话,则两个表所指向的对象都会改变,因为实际上就是同一个对象。可以由id(names)和id(names_1)看出两者指向的对象在内存中的地址是相同的,即是同一个对象

补充一下:列表2 = 列表1*n,将列表1里面的元素翻n倍,列表2与列表1为相互独立的列表

>>> names = [‘cui‘,‘hu‘,‘zhang‘,‘wang‘,‘luo‘]
>>> names_copy = names * 3
>>> names_copy
[‘cui‘, ‘hu‘, ‘zhang‘, ‘wang‘, ‘luo‘, ‘cui‘, ‘hu‘, ‘zhang‘, ‘wang‘, ‘luo‘, ‘cui‘, ‘hu‘, ‘zhang‘, ‘wang‘, ‘luo‘]
>>> print(id(names),id(names_copy))
56032904 55907784
2.2 浅copy
names = [‘cui‘,‘wang‘,‘luo‘,[‘zou‘,29],‘zhang‘,‘xu‘]
print(names)
names_copy = names.copy()
names[0] = ‘CUI‘    #更改names列表里的第一个值
names[3][0] = ‘ZOU min‘  #更改names列表里第三个列表里的第一个值
print(names)
print(names_copy)
[‘cui‘, ‘wang‘, ‘luo‘, [‘zou‘, 29], ‘zhang‘, ‘xu‘]
[‘CUI‘, ‘wang‘, ‘luo‘, [‘ZOU min‘, 29], ‘zhang‘, ‘xu‘]
[‘cui‘, ‘wang‘, ‘luo‘, [‘ZOU min‘, 29], ‘zhang‘, ‘xu‘]

浅copy是最常用的copy,只会copy列表第一层的对象,列表第一层改动的时候,不会影响copy的列表,但是第二层改动便会影响,因为这个例子中的子列表

令有3种实现方式:

import copy
names = [‘cui‘,‘wang‘,‘luo‘,[‘zou‘,29],‘zhang‘,‘xu‘]
print(names)
names_copy = copy.copy(names)

######################
names_copy = list(names)

##########################
names_copy = names[:]
2.3 深copy deepcopy(完全copy,基本不用,如果一个大表再完全copy一份,相当于占用两个内存空间)
1 import copy
2 names = [‘cui‘,‘wang‘,‘luo‘,[‘zou‘,29],‘zhang‘,‘xu‘]
3 print(names)
4 names_copy = copy.deepcopy(names)
5 names[0] = ‘CUI‘    #更改names列表里的第一个值
6 names[3][0] = ‘ZOU min‘  #更改names列表里第三个列表里的第一个值
7 print(names)
8 print(names_copy)
print(id(names),id(names_copy))

输出

[‘cui‘, ‘wang‘, ‘luo‘, [‘zou‘, 29], ‘zhang‘, ‘xu‘]
[‘CUI‘, ‘wang‘, ‘luo‘, [‘ZOU min‘, 29], ‘zhang‘, ‘xu‘]
[‘cui‘, ‘wang‘, ‘luo‘, [‘zou‘, 29], ‘zhang‘, ‘xu‘]

14440968 14441480

看出,无论names如何改动,都不影响names_copy,反之亦然,因为两者指定的是完全不同的内存地址

3,切片

列表元素的下表是从左到右是从0,1,2。。。。。,从右到左是-1,-2,-3

切片的原则是包头不包尾如names[1:-1]指选择第2个元素(下标为1)到倒数第2个(倒数第一个前面那一个)

names
[‘cui‘, ‘wang‘, ‘luo‘, ‘zhang‘, ‘xu‘]
names[-2:-1]
[‘zhang‘]
names[0:2]
[‘cui‘, ‘wang‘]
names[0:]
[‘cui‘, ‘wang‘, ‘luo‘, ‘zhang‘, ‘xu‘]
names[:-2]
[‘cui‘, ‘wang‘, ‘luo‘]
names[:]
[‘cui‘, ‘wang‘, ‘luo‘, ‘zhang‘, ‘xu‘]

下标0是可以省略的,names[:]表示全部,names[-3:]表示倒数3个

4,追加

names.append(‘NEW‘)
names
[‘cui‘, ‘wang‘, ‘luo‘, ‘zhang‘, ‘xu‘, ‘NEW‘]

5,插入

names = [‘cui‘,‘wang‘,‘luo‘,‘zhang‘,‘xu‘]
names.insert(1,‘charu1‘)
names.insert(-1,‘end‘)   #在最后元素的前面插入‘end‘
print(names)

最后面插入可以用上面的追加

6,修改

names[-2] = ‘haha‘

将倒数第二个元素修改为‘haha‘

7,删除

del names[2] #删除第3个元素

del names  #将列表nanmes整个删除,这样print(names)会报没有定义变形names

或者

names.pop()  ##删除最后一个元素

names.pop(2) ###删除第3个元素

8,扩展

names = [‘cui‘,‘wang‘,‘luo‘,‘zhang‘,‘xu‘]
age = [1,2,3,5]
names.extend(age)

输出:

[‘cui‘, ‘wang‘, ‘luo‘, ‘zhang‘, ‘xu‘, 1, 2, 3, 5]

9,统计

1的例子已经包含了,names.count(‘cui‘)  #统计列表names里面有几个‘cui’

10,排序&翻转(list.sort()    list.reverse())

 1 >>> names
 2 [‘cui‘, ‘wang‘, ‘luo‘, ‘zhang‘, ‘xu‘, 1, 2]
 3 >>> names[-1] = ‘2‘
 4 >>> names[-2] = ‘1‘
 5 >>> names
 6 [‘cui‘, ‘wang‘, ‘luo‘, ‘zhang‘, ‘xu‘, ‘1‘, ‘2‘]
 7 >>> names.sort()
 8 >>> names
 9 [‘1‘, ‘2‘, ‘cui‘, ‘luo‘, ‘wang‘, ‘xu‘, ‘zhang‘]
10 >>> names.reverse()
11 >>> names
12 [‘zhang‘, ‘xu‘, ‘wang‘, ‘luo‘, ‘cui‘, ‘2‘, ‘1‘]
13 >>> 

注意:排序前必须同一类型,顺序按照ASCII的顺序

11,获取列表元素的下标(list.index)

1 [‘zhang‘, ‘xu‘, ‘wang‘, ‘luo‘, ‘cui‘, ‘2‘, ‘1‘]
2 >>> names.index(‘wang‘)
3 2
4 >>> 

12,清空列表(list.clear())

>>> names
[‘cui‘, ‘hu‘, ‘zhang‘, ‘wang‘, ‘luo‘]
>>> names.clear()
>>> names
[]
>>>

13,列表去重(set(list))

>>> names_copy
[‘cui‘, ‘hu‘, ‘zhang‘, ‘wang‘, ‘luo‘, ‘cui‘, ‘hu‘, ‘zhang‘, ‘wang‘, ‘luo‘, ‘cui‘, ‘hu‘, ‘zhang‘, ‘wang‘, ‘luo‘]
>>> set(names_copy)
{‘hu‘, ‘luo‘, ‘cui‘, ‘wang‘, ‘zhang‘}
>>> 

14,如何查找一个列表中的重复元素(刚琢磨的,后续改进)

如果 len(names) = len(set(names)),说明列表不包含重复元素,len(list),会显示列表的长度,也就是有多少个元素

names = [‘cuiqing‘,‘luoshuchan‘,‘wanglingpeng‘,‘xuping‘,‘xuping‘,‘hujiaqi‘,1,2,1,2,1]
if len(names) != len(set(names)):
    names_tmp = []
    for n in range(len(names)):
        if names[n] not in names_tmp:
            names_tmp.append(names[n])
        else:
            print(‘重复元素:‘,names[n],‘索引位置为:‘,n)
            print(‘重复元素:‘,names[n],‘索引位置为:‘,names.index(names[n]))
    else:
        print(names_tmp)
else:
    print(‘列表不包含重复元素‘)
输出为:
重复元素: xuping 索引位置为: 4
重复元素: xuping 索引位置为: 3
重复元素: 1 索引位置为: 8
重复元素: 1 索引位置为: 6
重复元素: 2 索引位置为: 9
重复元素: 2 索引位置为: 7
重复元素: 1 索引位置为: 10
重复元素: 1 索引位置为: 6
[‘cuiqing‘, ‘luoshuchan‘, ‘wanglingpeng‘, ‘xuping‘, ‘hujiaqi‘, 1, 2]

五,元组

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表。

它只有2个方法,一个是count,一个是index。

>>> age = (1,3,5,7,7)
>>> age
(1, 3, 5, 7, 7)
>>> age.count(7)
2
>>> age.index(7)
3
时间: 2024-11-05 14:03:44

python学习-基础-day2的相关文章

Python学习基础篇第一篇——快速入门(适合初学者)

一.Python学习基础篇第一篇--(快速入门) 建议从Python2.7开始学习,Python2.7可以支持扩展大量的第三方类库,是目前比较成熟的版本 编写代码的软件推荐将python自带的IDLE和PyCharm集成IDE结合起来使用 1.1 Python命令行 Python命令行将以 >>> 开始,比如 >>>print 'Hello World!' 对于验证简单的命令可以在python自带的IDLE中完成  1.2 在Python自带的IDLE写一段小程序 在所

《转》python学习--基础上

学习的python本来想自己总结,但是发现了一篇不错的大牛的博客,拿来主义,,又被我实践了 关于前两篇如果总结的不详细,因此把他人的转载过来 http://www.cnblogs.com/BeginMan/archive/2013/04/12/3016323.html 一.欲练此功,必先自宫 从现在起,就开始真正地接触她了,或许很多人像我一样,不知道如何去快速掌握一门新的编程语言,今天贴出来一些建议,方便大家看看,这也是学习之前的十分重要的事情.虽然"欲练此功,必先自宫"太夸张,但是在

Python学习-基础篇1

一.变量: 1)变量定义规范: #1. 变量名只能是 字母.数字或下划线的任意组合#2. 变量名的第一个字符不能是数字#3. 关键字不能声明为变量名['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda',

python学习基础篇(一)

一:机器码和字节码 机器码计算机能够直接识别,字节码计算机不能直接识别. 高级语言:例如Python java c# php c++(字节码) 低级语言:c,汇编(机器语言) 二:语言之间的对比 java的执行效率比Python的执行效率高,但比Python的开发效率低. PHP类:适合于写网页 Python,java:可以写网页,也可以写后台 三:Python基础 python种类:jpython javascriptpython  pypy(cpython开发的Python) python的

python学习-基础和运算符

接下来是第二天的学习,关于基础和运算符部分,先放思维导图: while循环 (1)while循环,写完条件判断后加冒号":",再另起一行空4个空格写循环具体逻辑 while True: print('人生苦短,我也有python') 执行结果,将循环打印: 此外python中while有pass的写法,直接跳过本次循环,直接java中好像是没有. # 添加pass的写法,执行到pass,直接过,java中好像没有pass的写法 count = 0 while count < 10

python学习-基础-day1

17年4月中旬在51cto上报名了老男孩PYTHON高级自动化开发的课程,此随笔为记录学习中的有意义的东西(自我感觉有意义) 一.pycharm的基本配置与使用 之前自学过一段时间,一直用的自带的IDLE和notepad++,现在开始用pycharm,但是很不熟悉,随着使用不断补充和修改 开始可以设置字体.样板等,网上都很容易搜到 1.setting--editor--file and code template ,找到Python script,可以为新建的Python文件定义模板,只有再次新

python学习基础篇——字典

? 什么是字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: d = {key1 : value1, key2 : value2 } 键必须是唯一的,但值则不必. 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组,如果出现相同的键则前面键的值会被后面键的值所覆盖 dict = {'姓名': 'chenshifeng', '爱好': ('Pyth

python学习:基础概念

Python 包管理工具解惑 python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑).主要表现在下面几个方面: 这几个包管理工具有什么不同? * distutils * setuptools * distribute * disutils2 * distlib * pip 2. 什么时候该用pip,什么时候该用 setup.py ,它们有关系么? 3. easy_install . ez_setup.py . setup.py . se

Python学习基础篇—文件操作和集合

这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 我们哭了 我们笑着 我们抬头望天空 星星还亮着几颗 我们唱着 时间的歌 才懂得相互拥抱 到底是为了什么 因为我刚好遇见你 留下足迹才美丽 风吹花落泪如雨 因为不想分离 因为刚好遇见你 留下十年的期许 如果再相遇 我想我会记得你 我们哭了 我们笑着 我们抬头望天空 星星还亮着几颗 我们唱着 时间的歌 才懂得相互