内容简介: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基础学习(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Everything Store
Brad Stone / Little, Brown and Company / 2013-10-22 / USD 28.00
The definitive story of Amazon.com, one of the most successful companies in the world, and of its driven, brilliant founder, Jeff Bezos. Amazon.com started off delivering books through the mail. Bu......一起来看看 《The Everything Store》 这本书的介绍吧!