Python笔记第三章

一、列表的常见用法

列表和字典与集合一样也是可变序列,但列表是有序序列,可以使用下标进行引用。

列表不能作为集合的元素

list对字典进行转化:

li = list({'a':3,'b':9,'c':78})
print(li)

l = list({'a':3,'b':9,'c':78}.items())
print(l)

l2 = list({'a':3,'b':9,'c':78}.values())
print(l2)

'''
['a', 'b', 'c']
[('a', 3), ('b', 9), ('c', 78)]
[3, 9, 78]
'''

remove()方法删除第一个值为所给值的元素,没有返回值

x = [1,2,1,1,2]
print(x.remove(2))
#NONE

sort()方法用于按照指定的规则对列表中所有元素进行原地排序

reverse()方法用于将列表所有元素原地翻转

一定要注意:与sorted和reversed不一样,这个不是生成迭代器对象,而是直接原地改变对象的顺序,x变啦!!!

x = list(range(11))
import random
random.shuffle(x)
print(x)

x.sort(key=lambda item:len(str(item)),reverse=True)
print(x)

#[2, 4, 7, 3, 10, 6, 0, 1, 5, 8, 9]
#[10, 2, 4, 7, 3, 6, 0, 1, 5, 8, 9]

列表推导式

freshFruit = [' banana ',' loganberry ',' passion fruit ']
aList = [w.strip() for w in freshFruit]
print(aList) #['banana', 'loganberry', 'passion fruit']
#字符串方法strip()用来删除两侧的空白字符

使用列表推导式实现嵌套列表的平铺

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

使用列表推导式+if过滤掉不符合条件的元素

aList = [-1,-4,6,7.5,-2.3,9,-11]
li = [i for i in aList if i>0]
print(li)
#[6, 7.5, 9]
from random import randint
x = [randint(1,10) for i in range(20)]
print(x)

m = max(x)
print(m)

id = [index for index,value in enumerate(x) if value==m]
print(id)

'''
[7, 5, 9, 2, 10, 7, 6, 7, 1, 1, 3, 4, 3, 10, 2, 10, 3, 7, 1, 9]
10
[4, 13, 15]
'''

二、切片

除了适用于列表外,切片还适用于元组、字符串、range对象

1.使用切片操作在列表任意位置插入新元素

aList = [3,5,7]

#在列表结尾增加元素
print(aList[len(aList):])
aList[len(aList):] = [9]
print(aList)

#在列表头部插入多个元素
aList[:0]=[1,2]

#在列表中间位置插入元素
aList[3:3] = [4]

print(aList)

'''
[]
[3, 5, 7, 9]
[1, 2, 3, 4, 5, 7, 9]
'''

2.使用切片替换和修改表中的元素

aList = [3,5,7,9]
#替换前面的列表元素,等号两边的列表长度相等
aList[:3] = [1,2,3]
print(aList)

#增换后面的值,切片连续,等号两边的列表长度可以不相等
aList[3:] = [4,5,6]
print(aList)

#隔一个修改一个,等号两边的列表长度相等(如这个就是6/2=3)
aList[::2] = ['a','b','c']
print(aList)


'''
[1, 2, 3, 9]
[1, 2, 3, 4, 5, 6]
['a', 2, 'b', 4, 'c', 6]
'''

3.使用切片删除列表的元素

aList = [3,5,7,9]
aList[:3] = []
print(aList)
#[9]

aList2 = [3,5,7,9,11]
del aList2[::2]
print(aList2)
#[5,9]

三、元组

1.元组之间使用逗号分隔,元组中只有一个元素是必须在最后增减一个逗号

2.元组支持使用下标访问特定位置的元素,也支持双向索引,但是元组是不可变序列,不能对元组某一个索引值重新赋值,如x[1]=2。因此,元组没有提供append(),extend()和insert()等方法,无法向元组中添加元素。同样,元组也没有remove()和pop()方法,不支持对猿族元素进行del操作,不能从元组中删除元素。

3.元组支持切片操作,但只能用切片进行访问,不能进行删除插入修改等。

4.元组可以作为字典的键,也可以作为集合的元素。(列表不能当作字典键使用,也不能作为集合中的元素,因为列表不是不可变的。)

四、生成器表达式

生成器表达式的结果是一个生成器对象,具有惰性求值的特点,只在需要时每个元素生成一次,空间占用非常少。

访问时只能从前往后访问,没有任何方法可以再次访问已访问过的元素,也不支持使用下标访问其中的元素。当所有元素访问结束之后,如果需要重新访问其中元素,必须重现创建该生成器对象,enumerate,filter,map,zip等其它迭代器对象也具有这样的特点。

g = ((i+2)**2 for i in range(10))
print(g)
t = tuple(g)
print(t)
#生成器对象已经遍历过一遍了
l = list(g)
print(l)
'''
<generator object <genexpr> at 0x0000013B83485820>
(4, 9, 16, 25, 36, 49, 64, 81, 100, 121)
[]
'''
g = ((i+2)**2 for i in range(10))
#使用生成器对象的__next__()方法获取元素
print(g.__next__())
#使用函数next()获取生成器对象中的元素
print(next(g))

#使用循环直接遍历
g = ((i+2)**2 for i in range(10))
for item in g:
    print(item,end=' ')

print('\n')
print(list(g))
'''
4
9
4 9 16 25 36 49 64 81 100 121 

[]
'''

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值