1.遍历第一次,寻找最大值,并且记录最大值的索引max_index
2.list(dict,str)
伪代码:
if(是不是有饭吃):
如果是真 执行 (缩进)
else:
如果是假 执行
写代码学习过程
1.用草稿纸画一下思路
2.把草稿纸上的内容,写成伪代码
3.伪代码翻译成代码
list
list是有顺序的
表示方法: []
dict
dict没有顺序
{
'name':'reboot'
}
list的特点:
- 有序
- 通过索引获取值:列表[索引]
两个Python内置函数:
len(列表) 返回列表的长度
max() 最大值
min() 最小值
关于变量名:
- 不可以是list,len,max,min,del
删除列表元素:
- del删除元素(根据索引)
- list: 获取,删除,修改(直接赋值)
冒泡排序:
- 冒泡排序是一种典型的通过交换元素消除逆序的排序方法,是一种最简单的方法。
思路:
(1) 每一遍检查将一个最大的元素交换到最后的位置,一些较大元素向右移动,前一个for循环控制第一层元素,从0到7,即range(len(lst)),第二个for循环从1到range(1,len(lst)-i)遍历。
(2)从左到右比较相邻元素,前一个元素较小就交换。
(3)如果原始待排序序列本身有序,可以提前退出排序,设置flag标志,为 true时,退出循环。
例:
两种思路实现冒泡算法:
第一种:
arr=[3,6,2,5,1,32,4,7,33,99]
for i in range(len(arr)):
for j in range(len(arr)):
if arr[j] >arr[i]:
arr[j], arr[i] = arr[i], arr[j]
print arr
第二种:
arr=[3,6,2,5,1,32,4,7,33,99]
for i in range(1,len(arr)+1):
for j in range(len(arr)-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
print arr
第二种方法改进,加入flag标志:
arr = [3,6,2,5,1,32,4,7,33,99]
for i in range(1,len(arr)+1):
flag = True # 插入变量flag,来发现该list是否有序.
for j in range(len(arr)-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
flag = False
if flag: # 列表本来有序,故退出.
break
print arr
冒泡排序的特点:
复杂度 O(n^2)
稳定性
切片:
- 切片功能强大,可读性差
- 切片的原则:起点按照切片的方向上,找到重点
list的几个功能:
- append 没有返回值,修改原数组
- count 统计出现次数,返回值,不修改原数组
- extend 没有返回值,修改原数组
- index 没有找到值会报错,很少用
- insert (索引,插入的值),没有返回值,修改原数组.
- pop 可以理解为弹出,默认弹出最后一个返回,否则弹出给定索引的值
dict和json的区别
dict: 在python里是一种具体的数据结构
json: 是一种数据交换格式(标准)
二分法思想:一个排好序的list中,查找一个特定的值.
原理:每次都取一个middle值,与start值与end值作比较,直至取出最终的值。
例:
# arr = [1, 2, 3, 5, 23, 43, 65, 87, 90, 111, 232, 345, 2342, 2432, 3453,]
arr =range(10000)
start = 0
end = len(arr) - 1
res = 345 # 此为要查找的值.
count = 0
while True:
count += 1
mid = (start + end) / 2
if res < arr[mid]:
end = mid
elif res > arr[mid]:
start = mid
else:
print mid
break
print arr[mid], count