列表特征
有序
编号,又名索引、下标,可以通过编号访问元素
可遍历
可追加/可插入
可删除/可以弹出
可修改
长度不定
列表定义
如,nums = [1, 2, 3, 4, 5]
使用中括号包含
每个元素之间使用逗号分隔
可包含任意数据类型,如[1 ,2 , 3, 4, 5] 、[1, 'abc', True, False]
访问与修改列表
访问
列表是有序的数据集,通过列表名[索引]的方式访问列表中的元素
索引编号
1)从左向右依次为 0, 1, 2, 3, ... n -1
2)从右向左依次为 -1, -2, -3, ..., -n
3)访问元素的索引必须存在,否则报错
>>> l = [1, 2, 3, 4]
>>> l[0]
1
>>> l[3]
4
元素修改
1)通过直接给列表名[索引]修改对应索引位置的值
2)修改元素的索引必须存在,否则报错
>>> l[1] = 'abc'
>>> l
[1, 'abc', 3, 4]
>>> l[6] = '88'
Traceback (most recent call last):
File "", line 1, in
IndexError: list assignment index out of range
遍历列表
使用for访问列表中所有的元素
>>> nums = [1, 2, 3, 4]
>>> for num in nums:
... print(num)
...
1
2
3
4
类型转换
1)可以通过函数list将其他可遍历的类型转化为列表
>>> list('abcde')
['a', 'b', 'c', 'd', 'e']
2)使用range函数快速创建序列
range(end) 创建从 0到end-1 的连续整数组成的序列
range(start, end) 创建从 start到 end-1 的连续整数组成的序列
range(start, end, step) 创建从 start 到 end-1 的每隔step个整数组成的序列
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(0, 10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(2,10))
[2, 3, 4, 5, 6, 7, 8, 9]
None类型
>>> a = None
>>> a
>>> b = 1
>>> b
1
>>> type(b)
>>> type(a)
>>> print(a)
None
>>>
>>> a is None
True
>>> a is not None
False
>>> b is not None
True
列表常见操作
len 获取list元素的数量
max 获取list中元素最大值
min 获取list中元素最小值
判断元素是否在list中存储
>>> nums = [1, 2, 3, 4]
>>> len(nums)
4
>>> max(nums)
4
>>> min(nums)
1
>>> 1 in nums
True
>>> 2 not in nums
False
删除列表中元素
根据索引删除list中对应元素
>>> del nums[0]
>>> nums
[2, 3, 4]
列表运算
加(+):必须是两个list相加,相当于2个list拼接合并
乘(*):必须一个为整数,相当于将list 重复 n 次
>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> [1, 2, 3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
列表函数
append 添加元素到list最右侧
clear 清空list中的元素
copy 复制list中的所有元素到新list中并返回
count 计算list中存在相同元素的数量
extend 将一个可遍历数据中的所有元素追加到list后
index 获取元素在list中的位置
insert 在list指定位置添加元素
pop 弹出list中指定位置的元素(默认最右侧)
remove 移除list中指定的元素
reverse对list中元素进行反转
sort 对list中元素进行排序
元组函数
count 计算tuple中存在相同元素的数量
index 获取元素在tuple中的位置
练习题】
1、找出 nums=[6, 11, 7, 9, 4, 2, 1]中最大的数字
#!/bin/bin/env python
# -*- coding: utf-8 -*-
# __auhtor__: will_xue
# Date: -12-23
# Email: xuegqcto@
#!/bin/bin/env python
# -*- coding: utf-8 -*-
# __auhtor__: will_xue
# Date: -12-23
# Email: xuegqcto@
# 找出 nums=[6, 11, 7, 9, 4, 2, 1]中最大的数字
'''
nums = [6, 11, 7, 9, 4, 2, 1]
max = nums[0]
for num in nums:
if num > max:
max = num
print('最大数是:', max)
#=================================================
# 写法二,使用了 list.index()方法,列表赋值给max
max = 0
for x in nums:
if x > max:
i = nums.index(x)
max = nums[i]
print('最大数是:', max)
#=================================================
'''
nums = [-1, -9, -7, -6, -10, -11]
max = None
for num in nums:
if max is None:
max = num
elif num > max:
max = num
print('最大数是:', max)
2、移动nums中最大的数字到最后
提示:
从右到左依次两两比较,如果前面比后面大,则交换位置
第1次: 6,11比较,前面小,不交换[6, 11, 7, 9, 4, 2, 1]
第2次: 11, 7比较,前面大,交换[6, 7, 11, 9, 4, 2, 1]
第3次: 11, 9比较,前面大,交换[6, 7, 9, 11, 4, 2, 1]
第4次: 11, 4比较,前面大,交换[6, 7, 9, 4, 11, 2, 1]
第5次: 11, 2比较,前面大,交换[6, 7, 9, 4, 2, 11, 1]
第6次: 11, 1比较,前面大,交换[6, 7, 9, 4, 2, 1, 11]
交换元素
tmp = a; a=b; b = tmp;
a, b = b, a
3、Todolist
提示用户输入do或者任务(非do)
如果用户输入任务,则添加到list中
如果用户输入do,当任务为空时则打印无任务并退出,否则从list中根据先进先出原则打印任务
4、获取两个list中相同的元素到第三个列表中
nums_1 = [1, 2, 3, 4, 5, 3, 10, 11]
nums_2 = [1, 2, 3, 1, 4, 5, 5, 3, 12, 34]
#!/bin/bin/env python
# -*- coding: utf-8 -*-
# __auhtor__: will_xue
# Date: -12-23
# Email: xuegqcto@
'''
获取两个list中相同的元素到第三个列表中
nums_1 = [1, 2, 3, 4, 5, 3, 10, 11]
nums_2 = [1, 2, 3, 1, 4, 5, 5, 3, 12, 34]
'''
nums_1 = [1, 2, 3, 4, 5, 3, 10, 11]
nums_2 = [1, 2, 3, 1, 4, 5, 5, 3, 12, 34]
nums_3 = []
for num in nums_1:
if (num in nums_2) and (num not in nums_3):
nums_3.append(num)
print(nums_3)
结果:
[1, 2, 3, 4, 5]
5、保证第二个练习中第三个列表中元素不重复
6、用户管理
让用户在控制台上输入”find/list/add/delete/update/exit”格式字符串
如果输入add,则让用户继续输入用户名、年龄、联系方式等数据, 将用户数据(用户名, 年龄,联系方式),放入list中存储,在放入list之前检查用户名不重复,如果重复,则提示用户已存在
如果输入delete,则让用户输入”用户名”字符串,根据用户名查找list中数据,若存在数据则将该数据移除,若用户数据不存在,则提示不存在
7、用户管理
如果输入update,则让用户分别输入用户名、年龄、联系方式等数据,根据用户名查找list中数据,若存在数据则将改数据更新为新的(用户名, 年龄,联系方式),若用户数据不存在,则提示不存在
如果用户输入find,则让用户输入”用户名” ,根据用户名查找list中数据用户名等于字符串的用户信息,并打印
如果用户输入list,则打印所有用户信息
打印用户第一个行数据为用户信息描述,从第二行开始为用户数据
如果用户输入exit,则打印退出程序,并退出
【作业】
1、插入排序
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Auth : xuegqcto@
# 定义一个列表
nums = [11, 9, 22, 5, 30, 28, 15]
# 第一层for 循环用于控制 len(nums)次
for num in nums:
# 第二次for 循环用于前后比较,最终将列表最大值放到列表的最后。
# 循环len(nums)次,将变为有顺序的列表
for i in range(len(nums)-1):
if nums[i] > nums[i+1]:
nums[i],nums[i+1] = nums[i+1], nums[i]
print(nums)
2、二分查找
提示:mid = (high + low) / 2
mid为索引
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Auth : xuegqcto@
'''
描述:二分查找又称折半查找,它是一种效率较高的查找方法。
二分查找要求:
(1)必须采用顺序存储结构
(2).必须按关键字大小有序排列
查找过程
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,
如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,
如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
推理示例:
35
1 04950
2 25 4924
3 25 3637
4 31 3630
5 34 3633
'''
# 初始化一个有序列表
nums = list(range(0, 101))
print(nums)
# 计数
count = 0
# 定义索引
idx_min = 0
idx_max = len(nums)-1
txt = input('请输入数字: ')
txt_int = int(txt)
print(idx_min, idx_max)
while idx_min <= idx_max:
count += 1
mid = (idx_min + idx_max) // 2
if txt_int > nums[mid]:
idx_min = mid + 1
elif txt_int < nums[mid]:
idx_max = mid -1
else:
print('恭喜,猜对了', txt_int)
break
# 格式化输出,便于理解每次比对情况
print('第{0}次, idx_min:{1}, mdx_max:{2},mid:{3}'.format(count, idx_min, idx_max, mid))
结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
请输入数字: 35
0 100
第1次, idx_min:0, mdx_max:49,mid:50
第2次, idx_min:25, mdx_max:49,mid:24
第3次, idx_min:25, mdx_max:36,mid:37
第4次, idx_min:31, mdx_max:36,mid:30
第5次, idx_min:34, mdx_max:36,mid:33
恭喜,猜对了 35
Process finished with exit code 0
如果觉得《python运维处理序列_Python运维开发:02 序列》对你有帮助,请点赞、收藏,并留下你的观点哦!