Python第三课

@[枭]


Python第三课


今天讲解了Python的


  深浅复制

  列表排序与逆序、随机数

  列表推导式




深浅复制



 ①浅复制

  概念:浅复制是生成一个新的列表,把原列表的所有引用全复制到新列表中,切片返回的就是浅复制

在浅复制中,如若旧列表中包含有列表,在新列表中该表旧列表中列表元素时,旧列表也会随之改变,如:

    >>>aList=[3,5,7]
    >>>bList=aList[::]
    >>>aList==bList				#这里的“==”是询问是否元素一样
    True
    aList is bList			    #这里的“is”是询问是否同一对象
    False

但如果是:

    >>>aList=[3,[5],7]
    >>>bList=t=aList[::]
    >>>bList[1].append(6)		#这里是在索引为1处增加一个6
    >>>bList
    [3,[5,6],7]
    >>>aList
    [3,[5,6],7]

  综上可以得到,旧列表在浅复制时,不可变类型(如常数)不会受到影响,而可变类型(如列表)会受到影响


 ②深复制

  在使用深复制函数时,需要首先使用

import copy

深复制函数的格式为:

copy.deepcopy()

这里还是使用例子来解释:

    >>>aList=[3,[5],7]
    >>>bList=copy.deepcopy(aList)
    >>>bList[1].append(6)
    >>>bList
    [3,[5,6],7]
    >>>aList
    [3,[5],7]

  综上可以得到,深复制时不会影响到旧列表



列表排序与逆序、随机数



 ①列表排序

  排序包含有升序和降序,其中可以通过key函数来规定排序规则

升序的代码如下:

列表名.sort(reverse=False)
当括号里不填时默认为升序

降序的代码如下:

列表名.sort(reverse=True)

  sort函数不是内置函数,在代码之前需要加上import random

关于key来规定列表排序规则,这里用一个例子:

    >>>aList=[17,15,13,11,9,7,6,5,4,3]
    >>>aList.sort(key=lambda x:len(str(x)))
#lambda是匿名函数,这里代码的意思是通过列表元素转化的字符串长度进行排序
    >>>aList
    [17,15,13,11,9,7,6,5,4,3]
#长度相同时,通过旧列表的顺序进行排序

    sort函数会影响旧列表
  而 sorted()为内置函数,不会影响旧列表,且不用加import

用法如下:

	>>>aList=[3,4,5,6,7,9,11,13,15,17]
	>>>sorted(aList,reverse=True)
	[17,15,13,11,9,7,6,5,4,3]



 ②列表逆序

  同sort()函数,reverse()函数不是内置函数,在代码之前需要加上import random

列表逆序,就是列表的首尾不断交换元素,类似于第一排与倒数第一排交换,第二排与倒数第二排交换,以此类推


   reverse()函数会影响旧列表

  而reversed()为内置函数,不会影响旧列表,且不用加import

但是,reversed是个对象,不能直接访问元素
访问元素需要在前面加list()

比如说:

	>>>aList=[3,4,5,6,7,9,11,13,15,17]
	>>>newList=reversed(aList)
	>>>newList
	<Listreverseiterator object at 0x000...>
	>>>list(newList)
	[17,15,13,11,9,7,6,5,4,3]	



 ③随机数

要使用随机数,需要加上import random
常用的随机数函数有

random.shuffle(列表名)    随机打乱列表的顺序
random.random()    产生0到1之间的随机浮点数
random.randrange(start,end,间隔)  产生间隔为X的随机整数

如果要生成十个随机数,可以这样写

	import random
	aList=[random.randint(0,100) for i in range(10)]

如果要生成12—18随机选择数,可以这样写

	>>>import random
	>>>aList=random.randint(12,18)


列表推导式

  列表推导式的语法形式为

[exp for variable in iterable in iterable if condition]

e.g.

	vec=[[1,2,3],[4,5,6],[7,8,9]]
	[num for elem in vec for num in elem]

其中,for elem in vec遍历的是行,及vec[]

for num in elem遍历的是列,及vec[][]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值