Python之路1(四种基础数据结构)

Python的历史我就不在这里介绍了。

首先了解一下Python这门语言以及它和其他几种广泛使用语言的区别:

python 是一种解释型通用语言,java是半执行语言,C是一种可编译型语言。编译型语言,是指程序输入到编译器,编译器再根据语言的语法进行解析,然后翻译成语言独立的机器码,最终链接成具有高度优化的机器码的可执行程序。而解释型语言,则是程序被输入到解释器来运行。解释器在程序执行之前对其并不了解;它所知道的只是Python的规则,以及在执行过程中怎样去动态的应用这些规则。Python中有全局解释器锁,也就是所谓的python GIL 全局锁,所以在同一时间内,python解释器只能运行一个线程的代码。由于解释器没法很好的对程序进行推导,Python的大部分优化其实是解释器自身的优化。

在python中有且只有一种最优解,而且python是一种面向对象的语言。在python中,经常有时候会出现缩进问题,在Linux的vim中,set ts=4 使table缩进4个空格,默认8个,所以有时候我们看python的报错,得注意是否为语法问题或者是缩进问题SyntaxError:语法错误,IndentationError:缩进错误。

所以python中程序要注意语句对齐,用table补齐。

文件系统的作用:文件在系统中存放的方式,变量类型作用是变量在内存中存放的方式。类型转换,高->低,会失真,反之不会。

在Linux中,可用python或ipython进行测试,这里说一个Linux中的一个外设命令,会在编程时用到,为seq命令,一般用作一堆数字的简化写法。用seq 选择数字。 例:seq 1 99 则输出1-99,1-99相加时, seq -s + 1 99 | bc

接着说一下看一下python的简单脚本,例如:

012935_92Vv_2811257.png

应当注意的是,如果要输出中文,必须要有# coding=utf -8

然后看一下range()函数,range()函数很方便,使用range() 会生成一个列表

例如:range(1,10,2)从1开始到10,步长为2.

012952_C0ZX_2811257.png

Python的循环中, continue 只是结束当前循环, break则结束整个循环。

Python中与,或,非,异或等逻辑关系仍然适用

但它是以二进制来进行逻辑关系的。

Python中的if语句,跟shell之中基本类似,例如:

013006_q8Bv_2811257.png

可以添加elif但是,当有一个elif成立,则会跳过以后的elif直接结束。

接下来说一下python中的四种基础数据结构。

一.列表

python中, 列表定义直接用 名= [数据] 查看列表时直接调用。如定义li = [1,12,3,[2,3],'a'],查看子列表中的元素时, 用li[3][1],则会显示出3这个子列表中的值。

len(列表名)取列表长度。

列表也可以直接遍历。

013021_FvUC_2811257.png

 

 013032_MZLd_2811257.png

013047_shMs_2811257.png

判断某个元素是否在列表里存在, 元素 in 列表名。

013102_yueu_2811257.png

删除列表中的某一个元素,del 列表名[索引值]。

013114_Dr9n_2811257.png

list.append 追加 li.append('a') 该操作没有返回值。

list.extend(li2) 使列表合并。将li2合并到li,这里的li2是参数。

可以用两个列表相加,但是只是生成了结果,并不会保存。li + li2  ,需要生成结果时, 用li3 = li + li2, 就能得到li+li2结果。

li.index(元素),查看第一个出现的元素在列表中的下标。该元素必须在列表中出现。如 kong = li.index(2),当查看kong时,会得到2即从左往右数起第三个元素这个元素在li列表中的下标。

013130_sryo_2811257.png

li.insert(索引,值),插入一个数据。在最后一个位置插入一个数据,li.insert(len(li),数据)

013144_cNR0_2811257.png

删除,li.remove(加元素值),删除从左到右的第一个元素。但是当列表中没有该元素时,会直接退出, 在操作时, 用if进行一次判断。

li.pop()将列表最后的元素返回并且删除。 也可以用a=li.pop()使删除的元素保存,否则和执行完后,数据以及内存被删除。

li.count(元素)列出在列表中的某以元素出现的次数。

013159_s5i6_2811257.png

列表排序,li.sort(),从小到大排序, li.reverse,倒叙。

列表的切片, li[2:4]左半闭区间,有返回值,但必须接收,不会自动保存。如果不指定第一个元素,则从列表开头开始切,到结尾, 不指定第二个元素,则返回到最后一个值。

当对某一列表进行赋值,li3 = li, 改变li或者li3都会对列表进行改变。   此时,用切片进行赋值。 li4 = li[:],这时,改变li4就不会对li进行修改。

切片li[2:4:2]对li中的元素进行切片,步长为2,步长不管为多少,第一个元素必然存在。最后步长为-1时,则会将列表倒转。

li[::-1],就是反转。得到下标为偶数的元素时,li[::2],要得到下标为奇数的元素时li[1::2]

013214_h5O6_2811257.png

在python程序中,输出只能是print来执行,否则看不到结果。

二.元组

用小括号括起来的元素为元组。tuple 如 t = (2,3,4)

元组支持切片和下标操作。如有元组t = (2,3,4),则可以通过t[0],来通过下标查看元素, 也可以通过t[1:3]来对元组进行切片,但是不能对元组的数据进行操作。

元组中有列表时,可以对列表中的数据进行修改。如t = (1,2,3[2,3,4]),可以通过t[3][0]来修改列表中的第一个元素。

创建元组时,仅有一个数据时,要将逗号加上。t = (1,)

集和set 在创建时直接s = {1,2,3,4},要创建空集合时, 需要s = set(),并且集合不支持索引。集合是无序的。;列表不能放到集合里面。且集合中数据唯一。

将列表中的元素去重,将列表先变成集合再转化为列表。如  li= list(set([1,23,4,5,6])), 查看li  就完成了去重。

在集合中添加元素, 集合名.add(元素),删除某一个元素时,用s.discard(加元素),不会报错。

s.pop()随机删除集合中的某一个元素,有返回值。s.clear(),清空集合。

集合的差集,有s = {1,2,3,4,5,6} s1 = {2,4,5,6},s.difference(s1),以s集合为标准,求s1与s的相差的值。也可以用s - s1 来进行重载。

013244_6J3t_2811257.png

013258_u4Dd_2811257.png

三.集合

以大括号括起来的元素为集合,集合中没有相同元素。

013313_1aks_2811257.png

013325_eOdx_2811257.png

集合的差集,有s = {1,2,3,4,5,6} s1 = {2,4,5,6},s.difference(s1),以s集合为标准,求s1与s的相差的值。也可以用s - s1 来进行重载。

013344_PYHi_2811257.png

013356_QZtF_2811257.png

集合的交集 s.intersection(s1)如s = {1,2,3} s1 = {1,3,4}, 也可以用s & s1

集合的并集 s | s1

查看是否有交集 s.isdisjoint(s1),true 则没有。

查看是否是子集用s.issubset(s1),true 为有, false为没有。

 

 013411_CCS8_2811257.png

四.字典dict

内置的数据结构,字典,dict, 生成一个空的字典  d = dict() . 用type(d)查看属性。字典里可以放若干个键值,但是字典中的元素不能重复。如:d = {'name(键)':'kong(值)','age':20}。当出现重复时 d2 = {'name ':kk,'name':yy}此时,用d2显示时,只会显示出后面的姓名。 字典内的键必须唯一, 可以hash。

用字典名.keys(),可以查看所有的键的名称,以列表返回。将值返回, 用d.values。用d.items也可以返回键值队。

iterkeys 迭代器。每执行一次,得到一个结果。

用for循环将字典中的键值都打印出来,

for i in d.keys():

print i,d[i]

 

list如何转变为迭代器。 it2 = iter(li),此时li就变成了迭代器,用type查看it2.用for循环测试。 for i in li:

print i

也可以手动执行,it2.next。

013447_P8M6_2811257.png

013518_eo5O_2811257.png

013533_qgjI_2811257.png

013545_kWe5_2811257.png

013556_AZGp_2811257.png

013614_m4qB_2811257.png

python中可以进行多项赋值:a,b,c = [1,2,4]

用多重赋值遍历字典时,用for循环

for k,v in d.items():

print k,v

则会将元组中的数据打散输出。

在字典中,用:字典名.get("name")当字典中有值时返回,米有值时给定一个默认值。:字典名.get("name",100),没有name这个键就返回100

判断字典中有没有某一键且需要返回真假时,用:字典名.has_key('name'),true or false

字典也是引用赋值,仅是指向一块内存。字典没有切片,但是有copy,如:d4 = d2.copy。这种方式只是赋值了字典中所有的值, 不会改变内存中的数据。

字典中的数据改变直接用:字典名['name'] = '想改的内容'。

013632_r3Tf_2811257.png

013645_ee7P_2811257.png

列表解析

有一个列表li = [1,2,3],要对解表中的所有数据+1,借助中间变量可以实现。定义一个新的变量j=0,for i in li:

li[j] = i+1

j += 1

013701_boE0_2811257.png

就能成功。也可以直接列表解析:lib2 = [i+1 for i in li],   此处将i+1 赋值给了i。等于 for i in li:

li3.append(i+1)

013714_mDjp_2811257.png

如果在执行时, li2 = (i+1 for i in li)则生成一个迭代器, 可以用li2来执行li2.next。

013729_J8rG_2811257.png

013835_24ro_2811257.png

带条件的列表解析,如 有 li = [1,2,3,4,5,6] li2 = [i+1 for i in li if i % 2 == 0]

013850_HwMV_2811257.png

遍历多个列表 [(i,x) for i in li for x in li2]。 li = [1,2,34,], li2 = [2,5,6,7]

得到的结果是笛卡尔积。

013903_kde1_2811257.png

 

转载于:https://my.oschina.net/PackerLin/blog/687259

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值