1、列表的基本属性
- 创建列表:eg values = [32, 45, 89, 4, 6, 45, 1, 5]
- 访问列表元素:使用下标访问
- 遍历列表:使用for循环,以索引为循环变量或者以元素为循环变量
- 列表引用:values变量中存储的只是列表的引用,实际的列表元素存储在堆中,复制列表时新变量的引用指向内存中相同的位置
- 反向下标:可以以负数倒序访问列表
2、列表操作
- 追加元素:使用append方法可以追加元素
friends = []
friends.append("Tom")
friends.append("Jerry")
- 插入元素:元素会被插入到给定索引的元素之前,除非索引值等于列表中元素的数量,就会追加到最后一个元素之后
friends.insert(1, "Cindy")
- 查找元素:index方法,会返回元素第一次出现的索引;若想查找多个,则指定起始位置便可
n = friends.index("Tom")
n2 = friends.index("Tom", 0)
- 删除元素:pop方法删除指定位置的元素,pop方法的返回值是它删除的元素;若不提供参数,会删除列表中最后一个元素
- 连接与重复:使用"+"连接两个列表
- 一种初始化: monthScores = [0] * 10
- 相等性测试:使用 == 操作符,要求元素相同,顺序也相同
- 求和:sum([1, 2, 56, 4, 7, 7]), 求最大最小值: min([1, 2, 56, 4, 7, 7]) max([1, 2, 56, 4, 7, 7]), 排序: values.sort()从小到大排序
- 复制列表:完全复制,使用list方法 price = list(values)
- 创建列表:l[from : to] 意思是创建一个子列表,是l列表中从from到to的值
- 切片:第一个参数是包含在切片中的第一个索引,第二个参数是不包含在切片中的第一个索引;temperatures[6 : ]包含从6开始一直到结束的元素;temperatures[ : 2]表示前三个元素;切片适用于序列也适用于字符串
temperatures = [18, 56, 48, 48, 47, 12, 15, 31]
thirdQuarter = temperatures[2 : 4]
3、常用列表算法
- 填充:使用for循环便可,再加append方法
- 合并列表元素:使用"+"连接字符串
- 元素分隔符:在循环中添加,比元素数量少1
- 最大值和最小值:在for循环中一直比较,把较大的赋给最大值变量
- 线性搜索:使用while循环
- 收集和统计匹配项:for循环中进行计数
- 删除匹配项:使用pop方法删除,由于删除之后后面元素的索引值会自动减小1,因此不使用for循环,使用while循环,删除之后不让循环变量增加(因为当前的循环变量指向一个新的元素)
- 交换元素:使用一个中间值来交换两个元素
- 读取输入:使用input函数,如果是数字要进行类型转换
4、在函数中使用列表
- 以列表为参数:形参直接为列表名,不需要加 [ ]
- 修改原列表中的元素:调用时,形参和实参指向同一个列表,使用形参改变列表的值,函数调用结束后,形参变量被删除。但是列表的值已经被修改,并且实参仍然指向这个列表
- 函数可以直接返回列表
- 传值调用与传址调用:Python中函数不会修改传递给它的变量的内容,如果是一个数字,该数字会被复制到形参变量中,但是函数退出时,形参变量会被删除(可以将形参的值当做返回值,它在返回之后就被删除了);似乎列表会被直接修改,其实以列表为参数时,传递的是列表的引用,而不是列表,列表的引用不会别修改,而形参可以被用来修改,由于形参是实参的复制,它会直接直接将列表的元素修改。它们都是传值的。
- 元组:可以包含任何数据的不可变序列的数据类型,一旦创建,里面的内容便无法修改,可以使用圆括号来创建一个元组,或者省略也可以
- 字符串格式化:当使用字符串格式化时,如果需要同时输入多个数据,那么在字符串格式化运算符后的数据应该使用元组的形式,使用括号,并用逗号隔开
print("Enter a number between %d and %d:" % (0, 1000))
- 参数可变的函数:前面的*表示函数可以接收任意多个参数,values实际是一个元组;若定义的函数可以接收固定数量的实参,然后再接受可变数量的实参,将元组应该放在最后面
def sum(*values)
total = 0
for element in values :
total += element
return total
- 访问:可以使用下标的形式来访问元组,
- 使用元组快速交换两个值:
(values[i], values[j]) = (values[j], values[i])
- 使用元组返回值:可以同时返回多个数据,可以将返回的数据暂存在一个变量中,然后用下表运算符来访问元组的元素;亦可以使用元组赋值
def readDate() :
print("Enter a date :")
month = input("month: ") #由于没有类型转换,因此在元组中会有单引号
day = input("day: ")
year = input("year: ")
return (year, day, month)
def main() :
date = readDate()
print(date)
print(date[2])
main()
- python可以处理声音文件
5、一个程序:巧妙找到最小值的索引
for i in range(1, len(values)) : #这个算法很巧妙的找到了最小值的索引
if values[i] < values[smallestPosition]
smallestPosition =i
6、处理物理对象发现算法
对于一些抽象的问题,可以使用模型,或者绘出示意图来分析问题
7、表格
- 定义:包含行和列数值的组织形式称为表格或者矩阵
- 创建表格:有些类似C/C++中的二位数组;创建一个列表,列表中的每一个元素都是一个列表
ROWS = 10
COLS = 20
table = []
for i in range(ROWS) : #table中的每一个元素都是一个列表,而table本身是一个列表
row = [0] * COLS
table.append(row)
- 访问元素:类似C/C++中对二维数组的访问
- 定位邻居元素:4-邻域、8-邻域中的问题
- 计算行和列的总和:使用for循环,一个维度保持不变,遍历另一个维度
- 在函数中使用表格:类似对一维列表的操作
- 行长度可变的表格:使用列表复制操作 [0] * n,通过控制n的变化实现长度的变化
附录:之前写的一些关于列表的内容,用来参考
- 最基本数据结构——序列
Python有六种内建序列:列表、元组、字符串、Unicode字符串、buffer对象、xrange对象。 - 列表概述
列表和元组的区别是,列表可以修改,元组不能修改
索引:类似C++中的数组greeting = 'Hellow' print (greeting[0]) print (greeting[-1]) #从右侧输出,w print (greeting[-6]) forth = input('Year:')[3] #输出输入序列的第四个元素 print (forth)
分片:分片操作用于提取序列的一部分,第一个索引是需要提取部分的第一个元素的编号,最后的索引是分片之后剩下部分的第一个元素的编号。
number = [1,2,3,4,5,6,7,8,9,10] print (number[3:6]) #可以输出3,4,5 print (number[3:-2]) #可以输出3,4,5,6,7,8索引如果是正就从左往右方向,索引如果是负就从右往左 print (number[:-5]) #可以输出1,2,3,4,5 print (number[::2]) #以2为步长进行输出1,3,5,7,9 print (number[::-2]) #步长也是2,但是从右往左遍历
序列相加:直接使用+连接两个序列,但是只有想同类型的序列才可以执行相加操作,例如[1,2,3] + 'world!'是不合法的。
乘法:用数字x乘以一个序列会生成一个新的序列,新序列中原来的序列将被重复x次;
空列表,语句[None]*10产生一个长度为10的空列表#绘制一个盒子,局限于使用英文字符 screen_width = 120 sentence = input('Sentence:') text_width = len(sentence) #calculate the lenth of input secquence box_width = text_width + 6 #calculate the width of box left_margin = (screen_width - box_width)//2 print (' '*left_margin + '+' + '-'*(box_width ) + '+') #中文图案占用两个字符 print (' '*left_margin + '|' + ' '*(box_width ) + '|') print (' '*left_margin + '|' + ' ' + sentence + ' ' + '|') print (' '*left_margin + '|' + ' '*(box_width ) + '|') print (' '*left_margin + '+' + '-'*(box_width ) + '+')