Python基础学习(二)

栏目: Python · 发布时间: 5年前

内容简介: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.findstring.index (类似于Perl的index,返回指定str的索引)
  • string.joinstring.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版)

深入理解计算机系统(原书第3版)

Randal E.Bryant、David O'Hallaron / 龚奕利、贺莲 / 机械工业出版社 / 2016-11 / 139.00元

和第2版相比,本版内容上*大的变化是,从以IA32和x86-64为基础转变为完全以x86-64为基础。主要更新如下: 基于x86-64,大量地重写代码,首次介绍对处理浮点数据的程序的机器级支持。 处理器体系结构修改为支持64位字和操作的设计。 引入更多的功能单元和更复杂的控制逻辑,使基于程序数据流表示的程序性能模型预测更加可靠。 扩充关于用GOT和PLT创建与位置无关代码的......一起来看看 《深入理解计算机系统(原书第3版)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试