python学习笔记(五)列表

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的变化实现长度的变化

附录:之前写的一些关于列表的内容,用来参考

  1. 最基本数据结构——序列
    Python有六种内建序列:列表、元组、字符串、Unicode字符串、buffer对象、xrange对象。
  2. 列表概述
    列表和元组的区别是,列表可以修改,元组不能修改
    索引:类似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 ) + '+')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值