列表 List

+内建(built-in)数据结构(data structure),用来存储一系列元素(items)

如:lst = [5.4,'hello',2]

前向索引、后向索引、切片、拼接、成员、长度...

列表与字符串

+相同点

索引( [ ] 运算符)

切片( [:] )

拼接( + )和重复( * )

成员( in 运算符 )

长度( len() 函数 )

循环( for )

+不同点

使用 [ ] 生成,元素之间用逗号分隔

可以包含多种类型的对象;字符串只能是字符

内容是可变的;字符串是不可变的

列表的方法

+列表的内容是可变的

my list[0] = 'a'
my list[0:2] = [1.2,3,5.6]
my list.append()#追加元素 改变内容
my list.extend()#追加列表
my list.insert()#任意位置插入元素
my list.pop(),my list.remove()#删除元素 删除某个下标的元素
my list.remove(5)#删除元素,删除某内容
my list.sort()#排序
my list.reverse()#逆序 ...

读取10个数字,并计算平均数

内建函数sum

avg = sum(nums) / len(nums)

max

min

...

nums = []
for i in range(10):
nums.append(float(raw_input())) avg = sum(nums) / len(nums)
print avg

列表赋值

列表做函数参数

交换列表中两个元素的函数

示例:查找

1.返回下标

def search(lst,x):
for i in range(len(lst)):
if lst[i] == x:
return i return -1 lst = [10,5,8,13] print search(lst,8)

2.返回下标

index()方法

[1,2,3],index(2)

返回第一次的下标

要查找的元素不在列表中 会抛出异常,ValueError: 7 is not in list

lst = [10,5,8,13]

print lst.index(7)

线性查找

最坏运行时间:k0n+k1

时间复杂度

+量化一个算法的运行时间为输入长度的函数

+不需要显式的计算这些常数

如:4n+10和100n+137都与输入规模成正比

+大O表示,只保留高阶项

+线性查找的时间复杂度为:O(n)

+大O能告诉我们什么?

如果算法A的复杂度为O(n),算法B的复杂度为O(n^2),对于较大的输入,A总是比B快

如果算法A的复杂度为O(n),当输入规模翻倍时,运行时间也翻倍

+大O不能告诉我们什么?

实际运行时间



对于小规模输入的行为

函数的增长率

二分查找





不一定是元素第一次出现位置的下标

def bi_search(lst,x):
low = 0
high = len(lst) - 1 while low <= high:
mid = (low + high) / 2
if lst[mid] == x:
return mid
elif lst[mid] > x:
high - mid - 1
else :
low = mid + 1 return - 1 lst = [5,8,10,13]
print bi_search(lst,5)

二分查找的时间复杂度:

排序 Sort

+将一个无序列表,按照某一顺序(由小到大或由大到小)排列

+是计算机科学中常见而且重要的任务

+有许多不同的算法,最简单直观的为以下两种

选择排序 selection sort

冒泡排序 bubble sort

选择排序

找到最小的元素

删除它,然后将其插入相应的位置

对于剩余元素,重复步骤1

def selection_sort(lst):
for i in range(len(lst)):
min_index = i
for j in range(i + 1,len(lst)):
if lst[j] < lst[min_index]:
min_index = j
lst.insert(i,lst.pop(min_index)) lst = [10,8,5,13] selection_sort(lst) print lst

找到最小的元素

和第一个元素交换

对于剩余的元素,重复步骤1和2

def swap(lst,i,j):
tmp = lst[i]
lst[i] = lst[j]
lst[j] = tmp def selection_sort(lst):
for i in range(len(lst)):
min_index = i
for j in range(i + 1,len(lst)):
if lst[j] < lst[min_index]:
min_index = j
swap(lst,i,min_index) lst = [10,8,5,13] selection_sort(lst) print lst

选择排序的时间复杂度

冒泡排序

与选择排序类似,但是每次遍历不止交换一次

每次遍历,将最大的值排在最后

+提示:一单列表排好序,算法可以停止

def swap(lst,i,j):
tmp = lst[i]
lst[i] = lst[j]
lst[j] = tmp def bubble_sort(lst):
top = len(lst) - 1
is_exchanged = True
while is_exchanged:
is_exchanged = False
for i in range(top):
if lst[i] > lst[i + 1]:
is_exchanged = True
swap(lst,i,i + 1)
top -= 1 lst = [12,10,8,5,13] bubble_sort(lst) print lst

时间复杂度 O(n^2),与选择排序相同,但是通常速度更快

内建排序函数

sorted()函数

list.sort()方法

算法:quicksort

时间复杂度:

比选择和冒泡排序更快

嵌套列表

计算所有学生平均分

students = [['Zhang',84],['Wang',98],['Li',76]]

s = 0

for student in students:
s += student[1] print float(s) / len(students)

列表的解析或列表的推导 List Comprehension

+一种有原列表创建新列表的简洁方法

[表达式 for 变量 in 列表 if 条件]

lst = [x**2 for x in range(1,10)]

列表推导实现求平均分

students = [['Zhang',84],['Wang',98],['Li',76]]

print float(sum([x[1] for x in students])) / len(students)

使用列表解析对所输入数字x的因素求和

如:如果输入6,应该显示12,即1+2+3+6 = 12

sum([i for i in range(1,x + 1)if x % i == 0])

按照成绩由高到低排序

1.

students = [['Zhang',84],['Wang',98],['Li',76]]

def f(a):
return a[1] students.sort(key = f , reverse = True) print students

2.使用 lambda 函数

+定义匿名函数

没法直接调用,需要赋值给变量

students = [['Zhang',84],['Wang',98],['Li',76]]

students.sort(key = lambda x: x[1] , reverse = True)

print students

note 9 列表、时间复杂度、排序的更多相关文章

  1. 2019年6月12日——开始记录并分享学习心得——Python3.7中对列表进行排序

    Python中对列表的排序按照是排序是否可以恢复分为:永久性排序和临时排序. Python中对列表的排序可以按照使用函数的不同可以分为:sort( ), sorted( ), reverse( ). ...

  2. Python要如何实现(列表)排序?

    排序,是许多编程语言中经常出现的问题.同样的,在Python中,如何是实现排序呢?(以下排序都是基于列表来实现) 一.使用Python内置函数进行排序 Python中拥有内置函数实现排序,可以直接调用 ...

  3. easyui datagrid 点击列表头排序出现错乱的原因

    之前我的导师,也就是带我的同事,使用datagrid,发现点击列表头排序出现乱序,按理说只有顺序和逆序两种排序结果.因为他比较忙,当时没解决,把排序禁掉了,后来又要求一定要排序,所以他交给我. 一开始 ...

  4. Python list列表的排序

    当我们从数据库中获取一写数据后,一般对于列表的排序是经常会遇到的问题,今天总结一下python对于列表list排序的常用方法: 第一种:内建函数sort() 这个应该是我们使用最多的也是最简单的排序函 ...

  5. python内置数据类型-字典和列表的排序 python BIT sort——dict and list

    python中字典按键或键值排序(我转!)   一.字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序. Py ...

  6. [转载]EF或LINQ 查询时使用IN并且根据列表自定义排序方法

    原文地址:EF或LINQ 查询时使用IN并且根据列表自定义排序方法作者:李明川 EF和LINQ改变了原有的手写SQL时期的一些编码方法,并且增强了各数据库之间的移植性简化了开发时的代码量和难度,由于很 ...

  7. iRSF快速简单易用的实现列表、排序、过滤功能

    IRSF 是由javascript编写,iRSF快速简单易用的实现列表.排序.过滤功能(该三种操作以下简称为 RSF ). iRSF由三个类组成. iRSFSource 数据源 iRSFFilter ...

  8. Python 列表元素里面含有字典或者列表进行排序

    示例1:列表里面含有列表进行排序 s = [[1, 2], [100, 2], [33, 3], [25, 6]] s.sort(key=lambda k: k[0]) print(s) 结果: [[ ...

  9. Java对数组和列表的排序1.8新特性

    Java对数组列表的排序 数组 Integer[] a = new Integer[] { 1, 2, 3, 4, 5, 6, 9, 8, 7, 4, 5, 5, 6, 6 }; Arrays.sor ...

随机推荐

  1. CentOS 7 环境下GitLab安装及基本配置

    新实验室要求重新建设GitLab,对于我来讲,是第一次有机会当元老参与实验室的建设.下面分享我自己的实测经验: 1. 安装依赖软件并设置开机启动 yum install curlpolicycoreu ...

  2. Java 并发开发:Lock 框架详解

    摘要: 我们已经知道,synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多 ...

  3. sqlite比较时间起始1天的0点

    当天时间的0:00:00 strftime('%Y-%m-%d %H:%M:%S','now','localtime','start of day')

  4. ngix匹配规则

    语法规则: location [=|~|~*|^~] /uri/ { … } =:开头表示精确匹配 ^~:开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因 ...

  5. NSArray NSMutableArray

    NSArray 或者 NSMUtableArray 去除重复的数据: 原来集合操作可以通过valueForKeyPath来实现的,去重可以一行代码实现: [array valueForKeyPath: ...

  6. php7-编译安装参数

    ./configure \--with-fpm-user=www \--with-fpm-group=www \--prefix=/usr/local/php7 \--with-config-file ...

  7. linux 常用命令积累

    工作中常用的linux记录一下,方便查询使用 1.ln 创建连接 ,就是window上的快捷方式 创建软连接  ln -s 源文件 目标文件名   经常访问的文件夹(项目文件夹),在~创建一个软连很方 ...

  8. UVa10129(还没ac)各种re,o(╥﹏╥)o

    这是一道欧拉回路题 欧拉回路:就是一个路径包括每条边恰好一次. 判断是否满足欧拉回路.首先是图是联通的.其次图中每个点的入度等于出度.如果是欧拉路径的话,满足奇点只能等于2或0,并且对于有向图,奇点的 ...

  9. Springboot框架,实现请求数据解密,响应数据加密的功能。

    一.简要说明: 在做这个功能的时候,参考了很多文章,也试了用过滤器解决.但总体来说还是很麻烦,所以换了另一种解决方案.直接实现RequestBodyAdvice和ResponseBodyAdvice两 ...

  10. adv生成控制器手腕位置倾斜原因以及解决方案

    系统默认问题导致手腕倾斜详情描述: 手腕部分默认生成轴向是冲向模板下一层级第一个物体  简单说就是 FK轴向冲向模板中指方向 如图 默认模板没问题是因为  默认模板没有改动情况下系统中指与手腕在一条直 ...