内容简介:Python将字符串、列表和元组都当做序列,因此可对序列操作的函数都适用于以上三者,因此在Perl中常用的索引、切片等操作都适用于字符串,这相比Perl就方便多了,如:如果切片始于开头,则可以省略第一个索引(下面的结果是”Hel”,是因为Python的索引是半闭环,这点跟Perl不一样,容易搞混):可以用下述方式来复制序列(Python中简单的变量赋值是不等于变量复制的)
字符串
Python将字符串、列表和元组都当做序列,因此可对序列操作的函数都适用于以上三者,因此在 Perl 中常用的索引、切片等操作都适用于字符串,这相比Perl就方便多了,如:
"Hello"[1]
如果切片始于开头,则可以省略第一个索引(下面的结果是”Hel”,是因为 Python 的索引是半闭环,这点跟Perl不一样,容易搞混):
"Hello"[:3]
可以用下述方式来复制序列(Python中简单的变量赋值是不等于变量复制的)
a = "Hello" b = a[:]
可以在切片中加上第三个参数即步长
"Hello"[1:4:2]
还可以通过序列乘法来创建指定长度的空列表(一般的空列表都是用 []
直接创建的)
seq = [None] * 10
之前说有运算符 in
,其也可以在字符串中使用,判断某个字符是否在字符串中(但从这点来看,有时候处理字符串时确实要比Perl方便)
'H' in 'Hello'
对于字符串操作函数方便,本来我觉得肯定还是R方便,毕竟有个神奇的R包-stringr包,但是Python原来也有个string模块,而且现在还有些内建函数支持字符串的操作,如:
-
string.upper()
和string.lower()
函数(大小写转化) -
string.count
(返回指定str出现次数) -
string.find
和string.index
(类似于Perl的index,返回指定str的索引) -
string.join
和string.split
(类似于Perl的split和join操作符) -
string.replace
(替换字符串) -
string.startswith
(检查是否以str字符串开头,这个可以省一个正则) -
string.translate
(类似于Perl的正则转换,但是使用似乎有点繁琐)
列表
Python里创建变量时不需要指定类型,因此创建列表只要 list = []
即可,整体上与Perl的数组同一个用法,不外乎索引、切片以增加/删除列表元素等方法
主要几个常用函数:
-
字符串/元组转化为列表可以用
list()
函数 -
列表长度
len()
函数 -
取最大/最小数:
max()
和min()
删除元素:
a = list("Hello") del a[0:2]
列表方法:
list.append("Hello") list.extend([1,2,3]) list.index("Hello") list.insert(1, "Hello") x = list.pop(0) list.count("Hello") list.remove("Hello")
还有一个与列表类似的是元组,两者的不同之处只在于后者不能被修改!元组以 ()
创建,或者 tuple("Hello")
,因此索引、切片都可对元组使用
除了上述简单创建列表/元组的方法外,还可以通过表达式(推导式)的方法从序列创建你想要的列表/元组,一般接在for/if语句,如下所示:
vec = [2, 4, 6] [3*x for x in vec if x > 3]
然后如果要用上述方式创建嵌套列表的话:
[[x, x**2] for x in vec if x > 3]
对于嵌套数组的访问跟R的访问方式类似,比Perl要方便点,如 matrix = [[1,2,3], [4,5,6]]
,访问第一个列表中的第一个元素,则 matrix[0][0]
,历遍输出所有元素,则:
for i in matrix: for j in i: print(j)
del不仅可用于删除变量,还可以删除列表中的指定索引的元素,如 del list[0:1]
;而删除整个列表则可以: del list[:]
字典
Python的字典相当于Perl的哈希,键与值之间以冒号分隔, {}
创建字典,或者用 dict()
函数将键-值对序列转化为字典
items = [("a", "aaa"), ("b", "bbb")] d = dict(items)
因此Perl中的哈希规则一般都适用于字典,有些地方Python的字典显得更加方便一点,如:
- len(d),返回键-值的数目
- d[k],返回键K对应的值(跟Perl的表达式不一样),d[k] = v,将键k的值为v,可当做更改,也可当做赋值
- del d[k],删除键k的键-值对
- k in d,查看k是否在d字典的键中(而Perl中一般用匿名哈希来判断键是否存在)
- str(d),输出可打印的字典字符串表
对于字典中没有的键也可以赋值(跟Perl一样,类似于匿名哈希);对于字典的键,可以用数字、字符串或者元组,但不能用列表(Perl中的话,一般只能用变量或者引用),但字典的值却无这个限制,如:
d["aa"] = ["a", "aa"]
字典也有像列表一样的一系列方法:
-
d.items(),返回键-值的列表(叫字典视图的特殊类型?),主要用于迭代吧,类似于:
for key, value in d.items(): print(key, value)
-
d.keys(),返回字典所有的键,返回的也是字典视图,也可以叫做迭代器?,主要还是用于for循环,
list(d.keys())
;对应的还有d.values()
,返回所有的键对应的值 -
d.get(),返回指定键对应的值,如果键不存在则返回None(Perl的话直接访问键就行,键不存在的话也不会报错);类似的还有
d.setdefault()
,如果键不存在的话,可以指定键返回的值,相当于不返回None,当然如果键存在的话,就返回其对应的值 - d.fromkeys(),以输出的序列为键创建一个新的字典,键返回值都是None
- d.clear(),清空字典
-
d.copy(),浅复制,创建一个副本字典;当副本修改时,原本无变化,当原本修改时,副本也随之变化;为了避免以上问题,可以选择copy模块的深复制函数
deepcopy(d)
在列表中所示的表达式也可以适用于字典(用冒号分割即可):
{x: x**2 for x in (2, 4, 6)}
函数
Python中的函数的定义方式跟Perl和R都大同小异
def func(x): xxxxx
用Python中也是用return语句来提前或者选择性的返回表达式
对于函数可以设定参数以及默认参数
def func(x, y = "aaa"): print(x) print(y) return
Python自定义函数中可以用 *
来收集多余参数,并将参数放到元组中;而如果要收集默认参数,则用 **
来收集,此时是将默认参数和其对应的值放到字典中(在Perl中一般是把参数放到数组中,然后将其引用作为参数放到函数中,而R则跟Python比较类似,也有默认参数)
对于上述的说的Perl导入参数的方法,其实Python也有类似操作,就是用 *
来分配参数
def func(x, y): return x + y func(*(1,2))
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问
这点跟Perl不太一样,Perl在if/for/while等里面声明的变量都是局部变量;对于R来说,在for/while中新建变量也是局部变量,但是if中的则还是全局变量的(如果我没记错的话。。。),如:
if True: tmp = "1" print(tmp)
如果函数中的变量想要修改作用于以外的变量时,需要用到 global
(如果是嵌套作用域以外的变量,则用 nonlocal
)
num = 1 def func(): global num num = 123 print(num) func()
参考网站:
Python 3 教程本文出自于 http://www.bioinfo-scrounger.com 转载请注明出处
以上所述就是小编给大家介绍的《Python基础学习(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入理解计算机系统(原书第3版)
Randal E.Bryant、David O'Hallaron / 龚奕利、贺莲 / 机械工业出版社 / 2016-11 / 139.00元
和第2版相比,本版内容上*大的变化是,从以IA32和x86-64为基础转变为完全以x86-64为基础。主要更新如下: 基于x86-64,大量地重写代码,首次介绍对处理浮点数据的程序的机器级支持。 处理器体系结构修改为支持64位字和操作的设计。 引入更多的功能单元和更复杂的控制逻辑,使基于程序数据流表示的程序性能模型预测更加可靠。 扩充关于用GOT和PLT创建与位置无关代码的......一起来看看 《深入理解计算机系统(原书第3版)》 这本书的介绍吧!