第二天 第四章 序列的应用 - 列表

python内置了5种常用序列结构,分别是列表、元组、集合、字典、字符串。这些序列有以下几种通用的操作,其中集合和字典不支持索引、切片、相加、相乘的操作。

1. 索引:序列中每个元素都有一个编号,这个编号从0开始递增,即下标为0表示第一个元素,下标为1表示第二个元素,以此类推。

    索引可以是负数,从右向左计数,即最后一个元素的索引是-1,倒数第二个元素的索引是-2,依次类推。

2. 切片:这是访问序列中元素的另一种方法,它可以访问一定范围内的元素。切片操作可以生成一个新的序列。语法: sname[start : end : step] 

    如果想要复制整个序列,可以将start和end省略,但中间冒号要保留。如: nba[:] # 表示复制名称为nba的整个序列 

3. 序列相加:两个序列相加,即将两个序列拼接起来,不会去除重复的元素。注:只能相同的序列相加,如列表+列表、元组+元组等。

4. 乘法:序列乘以n,表示把此序列重复n次相加。

    还可以实现初始化指定长度列表的功能。如: emptylist = [None]*5 # [None, None, None, None, None] 

5. 检查某个元素是否是序列的成员:语法格式: value in sequence # value表示要检查的元素,sequence表示指定的序列,如果序列中包含被检查的元素,则返回True 

    也可以使用 not in 关键字检查某个元素是否不包含在指定序列中。

6. 序列的内置函数:

函数 作用
len() 计算序列长度,即多少个元素
max() 返回序列中最大元素
min() 返回序列中最小元素
list() 将序列转换为列表
str() 将序列转换为字符串
sum() 计算元素的和
sorted() 对元素进行排序。读音: [ˈsɔːtɪd]
reversed() 反向序列中的元素。读音:[rɪˈvɜːst]
enumerate() 将序列组合为一个索引序列,多用在for循环中。读音:[ɪˈnjuːməreɪt]

  一、列表:是python中内置的可变序列。形式上,所有元素都放在一对中括号中,两个相邻的元素以逗号分隔。内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入其中。且同一个列表中,元素类型可以不同。

1. 使用赋值运算符直接创建列表: listname = [element 1, element 2, element 3,...,element n]  注:建议使用时,一个列表只放入同一种类型的数据。

2. 创建空列表: emptylist = [] 

3. 创建数值列表: list(data) # data可以是range对象、字符串、元组或其它可迭代类型的数据 

4. 删除列表: del listname # 这个不常用,因为python有自带的垃圾回收机制,能自动删除不用的列表 

5. 访问列表元素:

print(['hello', 1, '你好', 3.14])  # ['hello', 1, '你好', 3.14]
print(['hello', 1, '你好', 3.14][2]) # 你好

6. 遍历列表:

# 第一种方法,用for循环,只能输出元素的值
for item in listname:
    print(item)

# 第二种方法,用for循环和enumerate()函数可以同时输出索引值和元素内容
for index, item in enumerate(listname):
      print(index, item)

7. 添加列表元素:

listname.append(obj) # obj为python支持的类型的对象,如:列表、字符串等等。注:obj是作为一个元素添加到listname中的。

listname.insert(index,obj) # index是将obj插入到指定位置,这个不常用,速度慢。

listname.extend(obj) # 将obj合并到listname,相当于两个列表相加

8. 修改元素: listname[index]=obj # 使用赋值即可修改元素 

9. 删除元素:

# 1 根据索引删除
del listname[-2]

# 2 根据元素值删除元素
listname.remove(obj)

# 如果列表中没有要删除的元素,会报错,所以最好判断一下
if listname.count(obj)>0:
    listname.remove(obj)

10. 获取指定元素出现的次数: listname.count(obj) # obj必须是精确匹配,返回出现的次数 

11. 获取指定元素首次出现的下标: listname.index(obj) # obj必须是精确匹配,返回首次匹配的索引值 

 12. 统计数值列表的元素和: sum(iterable[, start]) # iterable表示要统计的列表,start表示统计结果再加上start的值 

13. 对列表进行排序: listname.sort(key=None,reverse=False) # 这是使用列表对象的方法进行排序 

  key:表示指定从每个元素中提取一个用于比较的键(如:设置key=str.lower表示排序时不区分字母大小写

  reverse:是可选参数,True表示降序,False表示升序,默认为False。

  此方法对中文排序支持不好。需要重新编写。

14. 使用内置的sorted()函数进行排序: sorted(listname, key=None, reverse = False) 

  sort()方法会改变原列表的排序,sorted()函数不改变原列表,而是建立一个排序后的副本

15. 列表推导式:可以快速生成列表,有以下几种常用的语法格式。

# 语法格式 list = [expression for var in range]
# expression 表达式,用于计算新列表的元素。
# var 循环变量
# range 采用range()函数生成的range对象。

import random
randomnumber = [random.randint(10, 100) for i in range(10)]
print(randomnumber)
# [64, 18, 53, 58, 38, 84, 55, 24, 25, 66]
# list = [expression for var in oldlist]
# expression 表达式,用于计算新列表的元素
# var 变量,值为后面列表的每个元素值
# oldlist 用于生成新列表的原列表

price = [1200, 5330, 2887, 6299, 5555] # 原列表
sale = [var*0.5 for var in price] # 生成打五折的新列表
print(price)
print(sale)
# 从列表中选择符合条件的元素组成新的列表
# newlist = [expression for var in list if condition]
# condition 条件表达式,用于指定筛选条件

price = [1200, 5330, 2887, 6299, 5555]
sale = [var for var in price if var > 3000]
print(price)
print(sale)

price = [1200, 5330, 2887, 6299, 5555]
sale = [var*0.8 for var in price if var > 3000] # 高于3000的打八折
print(price)
print(sale)

16. 二维列表的创建有三种方法

# 直接定义
list1 = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]
print(list1)


# 使用嵌套的for循环
arr = []
for i in range(3):
    arr.append([])
    for j in range(4):
        arr[i].append(j)
print(arr)


# 使用列表推导式,推荐使用这种方法
arr = [[j for j in range(4)] for i in range(3)]
print(arr)

 

 

 

import datetime
mot = [
    '今天是星期一:\n坚持下去不是因为我很坚强,而是因为我别无选择。',
    '今天是星期二:\n含泪播种的人一定能笑着收获',
    '今天是星期三:\n没有伞的孩子必须努力奔跑!',
    '今天是星期四:\n你不勇敢,没人替你坚强!',
    '今天是星期五:\n命运如同手中的掌纹,无论多曲折,终掌握在自己手中。',
    '今天是星期六:\n真正的强者,不是流泪的人,而是含泪奔跑的人。',
    '今天是星期日:\n流过泪的眼睛更明亮,滴过血的心灵更坚强!'
]
day=datetime.datetime.now().weekday()
print(mot[day])

# datetime.datetime.now() 获取当前日期
# datetime.datetime.now().weekday() 在日期对象中获取星期

 

posted @ 2020-08-15 01:26  Zack6688  阅读(258)  评论(0)    收藏  举报