Python学习笔记——基础篇3
列表和索引
列表也是一个对象,跟其他对象一样,也可以将它赋值给一个变量。虽然列表本身是一个对象,但它可以存放其他对象的引用。通过索引,可以获得列表中的对象。
python还支持列表逆向索引,最后一个元素的索引为-1,它前面的索引为-2,以此类推。用列表来聚合相关信息容易出错。
>>>whales = [5, 4, 7, 3, 2, 3 ,2 ]
>>>whales[-1]
2
列表是异构的
列表可以含有任意类型的数据,包括整数、字符串甚至别的列表。
>>>krypton = ['Krypton', 'Kr', -157.2, -153.4]
>>>krypton[1]
'Kr'
>>>krypton[2]
-157.1999999999999
列表是可变的,列表的内容可以在创建后再修改。数字和字符串是不可变的。
与列表相关的内置函数
列表函数
方法 | 说明 |
len(L) | 返回列表L中的元素数量 |
max(L) | 返回列表L中的最大值 |
min(L) | 返回列表L中的最小值 |
sum(L) | 返回列表L中所有值的和 |
“+”可用于列表,通过“+”得到的列表,是创建了一个新列表,该列表中的元素引用的是原始列表中那些元素。
处理列表项
python提供了一个for循环来帮助处理列表中每个元素:
for variable in list:
block
嵌套循环
循环中的代码块可以包含任何东西,循环内部还可包含另一个循环。
>>>outer = ['Li', 'Na', 'K']
>>>inner = ['F', 'Cl', 'Br']
>>>for metal in outer:
for logen in inner:
print metal + halogen
切片
>>>celegans_markers = ['Emb', 'Him', 'Unc', 'Lon', 'Dpy', Sma']
>>>useful_markers = celegans_markers[0:4]
#useful_makers = ['Emb', 'Him', 'Unc', 'Lon']
这段代码创建了一个新列表,其中仅含有4种易于区分的标记。
切片的每一个索引为起始点,第二个索引则是比所需要的最后一个元素的索引值大1的数字。list[i:j]就是原始列表从索引i(包含)处开始,一直到索引j处(不包含)结束的一个切片。
别名机制
在python中,当两个变量均引用了同一个值时,它们互为别名。当通过其中一个变量对列表进行了修改之后,另一个变量的值也会发生改变。
sort_and_reverse(L),对其进行排序,然后再范旭。
>>>celegans_markers = ['Emb', 'Him', 'Unc', 'Lon', 'Dpy', 'Lvl']
>>>sort_and_reverse(celegans_markers)
['Unc', 'Lvl', 'Lon', 'Him', 'Emb', 'Dpy']
>>>celegans_markers
['Unc', 'Lvl', 'Lon', 'Him', 'Emb', 'Dpy']
列表方法
方法 | 说明 |
L.append(v) | 将值v添加到列表L中 |
L.insert(i,v) | 将值v插入到列表L的索引i处,同时将其后的元素往后移以便腾出位置 |
L.remove(v) | 从列表L中移除第一次找到的值v |
L.reverse() | 反转列表L中的值的顺序 |
L.sort() | 对列表L中的值以升序排序(字符串以字母表顺序为准) |
L.pop() | 移除并返回列表L的最后一个元素(该列表不得为空) |
嵌套列表
列表也可以含有列表,将子列表赋值给变量后,将会创建出该子列表的一个别名,通过这个引用对子列表做出的任何修改将反应到主列表中,反之亦然。
>>>life = [['Canada', 76.5], ['United States', 75.5], ['Mexico', 72.0]]
>>>canada = life[0]
>>>canada[1] = 80.0
>>>canada
['Canada', 80.0]
>>>life
[['Canada', 80.0], ['United States', 75.5], ['Mexico', 72.0]]
列表并不是python中唯一的列表,字符串其实就是一个不可变的字符序列。
元组
元组是一种不可变序列,元组使用的是圆括号而不是方括号、跟字符串和列表一样,元组可以被索引、切片和迭代。
>>>bases = ('A', 'C', 'G', 'T')
for b in bases:
print b
A
C
G
T
虽然()用于表示空元组,但带有一个元素的元组并不是写作(x),而是写作(x,),后面要多加一个逗号。这样做的目的是为了避免歧义,(5+3)既可以理解为8,也可以理解为仅含值8的一个元组。元组在创建出来之后就不能再修改了。不过其中的对象仍可以修改。
>>>life = (['Canada', 76.5], ['United States', 75.5], ['Mexico', 72.0])
>>>life[0][1] = 80.0
>>>life
(['Canada', 80.0], ['United States', 75.5], ['Mexico', 72.0])
把文件看做列表
>>>file = open("data.txt", "r")
open函数的第一个参数是一个字符串,它含有需要打开的文件的名称。第二个参数用于指定一个模式。共有三种选择,“r”表示读取,“w”表示写入,“a”表示追加。
写入和追加的区别在于,写入时将会抹去文件原有的内容,追加则是在文件末尾上加新的数据。
open函数的执行结果并不是文件的内容,返回的是 一个文件对象,该对象拥有文件内容所需的方法。
read方法,如果没有提供参数,则它将读取文件中的所有数据,并以字符串的形式返回。如果提供一个正整数参数,则它只会读取整数个字符。在处理很大的文件时,这非常有用。不管哪种方式,当文件中没有其他数据可读时,该方法会返回一个空字符串。readline功能为读取文件中的下一行文本。一行即直到下一个“行尾标记”之前的所有字符,并且包含该行尾标记。
命令行参数
在运行程序时,传递一些参数,跟调用函数或方法的做法差不多。这些值最终会被存入一个名为argv的特殊变量中(系统模块sys),即一个用于承载这些参数的列表(以字符串的形式)。
sys.argv[0]的值是需要执行的python程序的名称,其他的命令行参数分别存放在sys.argv[1], sys.argv[2]。。。
import sys
if __name__ == '__main__':
start_line = int(sys.argv[1])
end_line = int(sys.argv[2])
data = open('data.txt', 'r')
data_list = data.readlines()
data.close()
for line in data_list[start_line:end_line]:
print line.strip()