从零开始学Python-day3

Python--Day3

学习要有定位,明确目标地去学习。---leaves

python02---list知识

一 list的概念

列表的概念:列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。

list  array  数组 是同一种数据

list的优点:

可遍历

有序的

可以切片

快速生成list的方法  : range(数字)   list("字符串")

##列表中可以嵌套任意类型的数据
In [4]: arr = [‘C‘,1,2,True,False,[2,3,[‘js‘,‘html‘]],‘python‘]

##range()快速生成list
In [1]: arr = range(10)
In [2]: arr
Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

##list()快速生成list
In [7]: arr1 =  list(‘python‘)
In [8]: arr1
Out[8]: [‘p‘, ‘y‘, ‘t‘, ‘h‘, ‘o‘, ‘n‘]

##可以通过索引获取值
In [5]: arr[5]
Out[5]: [2, 3, [‘js‘, ‘html‘]]

##索引值也能为负值
In [6]: arr[-1]
Out[6]: ‘python‘

##in  判断元素是否在list中
In [8]: arr1
Out[8]: [‘p‘, ‘y‘, ‘t‘, ‘h‘, ‘o‘, ‘n‘]
In [10]: ‘x‘ in arr1
Out[10]: False
In [11]: ‘p‘ in arr1

##小练习  自己实现in的功能
In [14]: result = 0	#用来存放判断后的结果
In [15]: for i in arr1 :
    ...:     if ‘x‘ == i:
    ...:         result = "True"
    ...:     result = "False"
    ...: print result
    ...: 
    ...:     
False

二、list的方法(主要针对数字)

len() ====>list长度

max() ====>list 最大值

min() ====>list最小值

del() ====>删除索引值

列表可以使用‘+‘拼接和使用‘*‘重复

###del 用法 ==直接删除值
In [32]: arr 
Out[32]: [‘C‘, 1, 2, True, False, [2, 3, [‘js‘, ‘html‘]], ‘python‘]
In [33]: del arr[1]
In [34]: arr
Out[34]: [‘C‘, 2, True, False, [2, 3, [‘js‘, ‘html‘]], ‘python‘]

##list 可以使用+拼接
In [35]: l1 = [‘c‘,‘d‘]
In [36]: l2 = [‘1‘,2]
In [37]: l1 + l2
Out[37]: [‘c‘, ‘d‘, ‘1‘, 2]

##list 可以使用+拼接
In [35]: l1 = [‘c‘,‘d‘]
In [36]: print l1 * 2
Out[37]: [‘c‘, ‘d‘,‘c‘,‘d‘]

##list修改值 ==>直接修改
In [39]: l1 = [‘c‘,‘d‘]
In [40]: l1[1]="hello"
In [41]: l1
Out[41]: [‘c‘, ‘hello‘]

三、排序

排序:编程世界的游戏规则。

各种排序算法的演示动画网址(民族舞蹈讲述排序):

http://www.bilibili.com/video/av4722429/index_5.html

各种算法的动画演示(http://www.atool.org/sort.php)

3.1 冒泡排序

冒泡排序的原理:相邻两个元素挨个对比,如果一个元素比右边大,则交换位置。

冒泡排序过程如下:

arr = [3 , 5, 1 ,32 , 4]

第一次  3和5比 不变       [3 , 5, 1 ,32 , 4]

5和1比 交换       [3 ,1 , 5 ,32 , 4]

5和32比 不变       [3 ,1 , 5 ,32 , 4]

32和4比交换        [3 ,1 , 5 , 4 ,32]

第二次    在[3 ,1 , 5 , 4 ,32]基础上

3 和1 比较  交换  [1 ,  3 , 5 , 4 ,32]

3 和5 比较  不变  [1 ,  3 , 5 , 4 ,32]

5 和4 比较  交换  [1 ,  3 , 4 , 5 ,32]

第三次  在[1 ,  3 , 4 , 5 ,32] 基础上

1和3比较  不变  [1 ,  3 , 4 , 5 ,32]

3和4比较  不变  [1 ,  3 , 4 , 5 ,32]

第四次  [1 ,  3 , 4 , 5 ,32]

1 和 3 比较不变  [1 ,  3 , 4 , 5 ,32]

最终的冒泡排序代码如下:

[[email protected] 02]# cat maopao.py 
arr = [33,3 , 5, 1 ,32 , 4]
print arr
length = len(arr)
print length
for j in range(length-1):
	print "di %s ci xun huan :" %j
	for i in range(length-1-j):
		if arr[i] > arr[i+1]:
			arr[i],arr[i+1] = arr[i+1],arr[i]
	print arr
print "The final result is %s" % arr

[[email protected] 02]# python maopao.py 
[33, 3, 5, 1, 32, 4]
6
di 0 ci xun huan :
[3, 5, 1, 32, 4, 33]
di 1 ci xun huan :
[3, 1, 5, 4, 32, 33]
di 2 ci xun huan :
[1, 3, 4, 5, 32, 33]
di 3 ci xun huan :
[1, 3, 4, 5, 32, 33]
di 4 ci xun huan :
[1, 3, 4, 5, 32, 33]
The final result is [1, 3, 4, 5, 32, 33]
[[email protected] 02]#

3.2 选择排序

选择排序原理:拿一个元素分别与剩下的元素对比,选出最小或最大的

###选择排序实现代码如下:
[[email protected] 02]# cat xuanze.py 
arr = [3 , 5, 1 ,32 , 4]
print "The   sorted  arr  is   : %s" % arr
l = len(arr)
print l 
for i in range( l-1 ):
	print "di  %s ci xuanze paixu " %i 
	#jiang a[i] qu chu lai  fen bie yu  houbian bijiao 
	for j in range(i+1,l):
		if arr[i] > arr[j]:
			arr[i] ,arr[j] = arr[j],arr[i]
	print arr

print "*" * 40
print arr
[[email protected] 02]# python xuanze.py 
The   sorted  arr  is   : [3, 5, 1, 32, 4]
5
di  0 ci xuanze paixu 
[1, 5, 3, 32, 4]
di  1 ci xuanze paixu 
[1, 3, 5, 32, 4]
di  2 ci xuanze paixu 
[1, 3, 4, 32, 5]
di  3 ci xuanze paixu 
[1, 3, 4, 5, 32]
****************************************
[1, 3, 4, 5, 32]
[[email protected] 02]#

3.3 算法扩展

算法的复杂度: 算法两方面:1复杂度 2.稳定性

复杂度分为时间复杂度和空间复杂度

冒泡排序 ==>复杂度o(n^2)  稳定性高

希尔排序           ===>复杂度  不知道。目前还无法算出来

3.4 插入排序

插入排序的原理:是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序图解:

小知识:如何利用range()使list倒序:

In [13]: for i in range(3,0,-1):
    ...:     print i 
    ...:     
    ...:     
3
2
1

插入排序代码(加深理解)

[[email protected] 02]# cat test.py 
def InsertSort(mylist):  
    size = len(mylist)  
    i = 1  
    for i in range(1, size):  
	print "===================================di %s ci xun huan ======================="  % i
	print "mylist[i]=== mylist[i-1] : %s == %s"  %(mylist[i],mylist[i-1])
        if mylist[i] < mylist[i - 1]:  
            tmp = mylist[i]  
            j = i - 1  
	    print "****j : %s" %j
            mylist[j + 1] = mylist[j]  
              
            j = j - 1  
            while j >= 0 and mylist[j] > tmp:  
                 mylist[j + 1] = mylist[j]  
                 j = j - 1  
            mylist[j + 1] = tmp        
#mylist0 = [12, 11, 13, 1, 2, 4, 3]  
mylist0 = [6 , 5 , 3 , 1 , 8 , 7 , 2 , 4]
InsertSort(mylist0)  
print(mylist0)
[[email protected] 02]# python test.py 
===================================di 1 ci xun huan =======================
mylist[i]=== mylist[i-1] : 5 == 6
****j : 0
===================================di 2 ci xun huan =======================
mylist[i]=== mylist[i-1] : 3 == 6
****j : 1
===================================di 3 ci xun huan =======================
mylist[i]=== mylist[i-1] : 1 == 6
****j : 2
===================================di 4 ci xun huan =======================
mylist[i]=== mylist[i-1] : 8 == 6
===================================di 5 ci xun huan =======================
mylist[i]=== mylist[i-1] : 7 == 8
****j : 4
===================================di 6 ci xun huan =======================
mylist[i]=== mylist[i-1] : 2 == 8
****j : 5
===================================di 7 ci xun huan =======================
mylist[i]=== mylist[i-1] : 4 == 8
****j : 6
[1, 2, 3, 4, 5, 6, 7, 8]
[[email protected] 02]#

四、list的切片

list的切片:切片功能强大,可读性差。主要用于获取连续数据

切片的原则:起点按照切片方向上的找到终点

list的具体切片小例子:

Out[49]:arr =  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [50]: arr[:4]
Out[50]: [0, 1, 2, 3]

In [51]: arr[6:]
Out[51]: [6, 7, 8, 9]

In [52]: arr[::2]
Out[52]: [0, 2, 4, 6, 8]

In [53]: arr[::-1]
Out[53]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

切片可以删除list元素
In [54]: arr[1:4] = [‘a‘]
In [55]: arr
Out[55]: [0, ‘a‘, 4, 5, 6, 7, 8, 9]

##增加元素
In [56]: arr[1:1] = [‘1‘,‘2‘,‘3‘]
In [57]: arr 
Out[57]: [0, ‘1‘, ‘2‘, ‘3‘, ‘a‘, 4, 5, 6, 7, 8, 9]

五、list的其他常用方法

append()         追加元素

count()        统计list中某个元素出现的次数

extend()       没有返回值,修改原数组

index()        没有返回值,查找某个元素的索引

insert(1,‘value‘)  在index出插入值value

pop()         弹出,默认弹出最后一个值,返回

remove()       remove(value)删除具体值

reverse()       反向list

list 其他常用方法的举例

##append举例
In [60]: arr = [0, 1, 2]
In [61]: arr.append(‘!‘)
In [62]: arr
Out[62]: [0, 1, 2, ‘!‘]

##count的使用
In [63]: arr = [1,2,1,3]
In [64]: arr.count(1)
Out[64]: 2

##extend的使用
In [65]: arr1 =  list(‘python‘)
In [66]: arr2 = range(2)
In [67]: arr1.extend(arr2)
In [68]: arr1
Out[68]: [‘p‘, ‘y‘, ‘t‘, ‘h‘, ‘o‘, ‘n‘, 0, 1]

##index的使用
In [68]: arr1
Out[68]: [‘p‘, ‘y‘, ‘t‘, ‘h‘, ‘o‘, ‘n‘, 0, 1]
In [70]: arr1.index(0)
Out[70]: 6
In [71]: arr1.index(‘p‘)
Out[71]: 0

##insert的用法
In [73]: arr2
Out[73]: [0, 1]
In [74]: arr2.insert(1,‘hello‘)
In [75]: arr2
Out[75]: [0, ‘hello‘, 1]

###pop()默认删除最后一个,也可以提供一个索引值弹出指定元素
In [75]: arr2
Out[75]: [0, ‘hello‘, 1]
In [76]: arr2.pop()
Out[76]: 1
In [77]: arr2.pop(0)
Out[77]: 0
In [78]: arr2
Out[78]: [‘hello‘]

六、队列和桟

队列:  先入先出  ===>append()和pop(0)

桟 :   先入后出  ===>append()和pop()

小练习:

#采用持续队列,让用户输入东西:

如果用户输入的是add

再让用户输入一件事情(吃饭)

如果用户输入的是do

把之前输入的值打印出来。

如果没事情可做,就打印nothing

如果输入的是其他值,则终止循环

具体代码如下:==>对应先入后出的思想
[[email protected] 02]# cat 01.py 
store = []
while True:
	x = raw_input("qing shu ru action: ")
	if x == "add":
		y = raw_input("qing shu ru thing: ")
		store.append(y)
		print store
	elif x == "do":
		print "****do "
		print len(store)
		if len(store) != 0:
			print store.pop()    ##先入后出思想。
			                     ##先入先出思想。pop(0)
		else:
			print "nothing"
	else :

		print "The final result is %s" %store
		break

###执行代码过程如下:
[[email protected] 02]# python 01.py 
qing shu ru action: add
qing shu ru thing: 111
[‘111‘]
qing shu ru action: add
qing shu ru thing: 222
[‘111‘, ‘222‘]
qing shu ru action: do
****do 
2
222
qing shu ru action: 
The final result is [‘111‘]		

七、数组、链表

数组  1,2,3,4,5

优点: 根据索引寻找比较快,从最后追加也特别快.命中CPU缓存概率比较大

缺点:插入很慢, 删除也很慢。(插入的话,后边元素要依次往后移)

链表:1 ---> 2  ----> 3 ---->4 --->5

链表的查找很慢,插入很快,删除也很快。尾部追加也很快

哈希表  d = {"name": "hello"}  复杂度  O(1)

复杂度为O(1),可以通过具体的值来建立关系(python的dict)

本身没有顺序,查找,删除,修改都很快key ===>var1

FNV哈希

MD5哈希

一致性哈希

八‘list与dict的区别

list 和dict的区别

相同:都可以存储复杂的数据结构,可以嵌套列表、字典等

不同:

list是有序的,通过index索引值来获取元素,赋值。删除,增加值

dict是无序的,key-value的键值对。通过key来获取value的值。

延伸

dict 和 json的区别

dict是Python中具体的数据结构

json:是一种数据交换格式(标准)<===XML

严格的数据结构:冒号之后要有空格

key,val之间使用冒号

多个数据之间使用

字符串必须用双引号

####json举例
In [79]: d = {‘name‘:‘reboot‘,‘age‘:43}
In [80]: import json
In [81]: json.dumps(d)
Out[81]: ‘{"age": 43, "name": "reboot"}‘  ==>json数据

九、练习:

###练习1 :数组去重:
###小练习:[1,2,3,4,2,12,3,3,2,13,21,2,333,4]
In [84]: arr = [1,2,3,4,2,12,3,3,2,13,21,2,333,4]
In [86]: arr_1= []
In [87]: for i in arr:
    ...:     if i in arr_1:
    ...:         pass
    ...:     else:
    ...:         arr_1.append(i)
    ...: print arr_1
    ...: 
[1, 2, 3, 4, 12, 13, 21, 333]

###小练习2 
###arr1 = [1,2,3,4,2,12,3,3,2,13,21,2,333,4]
###arr2 = [2,1,4,32,452,21,14,333]
###求arr1和arr2的交集
In [92]: arr1 = [1,2,3,4,2,12,3,3,2,13,21,2,333,4]
In [93]: arr2 = [2,1,4,32,452,21,14,333]
In [94]: arr_r = []
In [95]: for i in arr1:
    ...:     if (i in arr2) and (i not in arr_r):
    ...:         arr_r.append(i)
    ...: print arr_r
    ...: 
[1, 2, 4, 21, 333]

十、二分思想找到range(100000)中任意一个数字

二分思想:一个排好的list中,找到指定数字。
arr = range(10000)

x = raw_input("qing shuru yi ge shuzi ")
start = 0
end = len(arr)-1
count = 0
while True :
        count += 1
        half = ( start + end )/2
        if int(x) > arr[half]:
                start = half
        elif int(x) < arr[half]:
                end = half
        else :
                print "The index value is %s" %half
                break
print "Total found  %s times " %count
时间: 2024-10-16 18:48:19

从零开始学Python-day3的相关文章

学习《从零开始学Python网络爬虫》PDF+源代码+《精通Scrapy网络爬虫》PDF

学习网络爬虫,基于python3处理数据,推荐学习<从零开始学Python网络爬虫>和<精通Scrapy网络爬虫>. <从零开始学Python网络爬虫>是基于Python 3的图书,代码挺多,如果是想快速实现功能,这本书是一个蛮好的选择. <精通Scrapy网络爬虫>基于Python3,深入系统地介绍了Python流行框架Scrapy的相关技术及使用技巧. 学习参考: <从零开始学Python网络爬虫>PDF,279页,带目录,文字可复制: 配套

数据分析学习资料《利用Python进行数据分析第2版》+《Python数据分析与挖掘实战》+《从零开始学Python数据分析与挖掘》

数据分析涉及统计学.线性代数.图形分析绘制.数据挖掘等知识,推荐系统学习电子资料<利用Python进行数据分析第2版>.<Python数据分析与挖掘实战>.<从零开始学Python数据分析与挖掘>电子书和代码测试. <利用Python进行数据分析第2版>电子书代码,每一章之间有递进关系,适合在Python入门<Python编程从入门到实践>电子书之后阅读,本专门针对数据分析领域的.我细致地读了一遍,敲了一遍代码,一开始没有头绪,进展缓慢,后来逐渐

从零开始学Python程序设计(Python 3.5以上)中文pdf扫描版[172MB]高清下载

Python语言是面向对象的模块化设计语言,它易于学习.易于维护.可读性强,适合初学者作为入门程序设计语言. <从零开始学Python程序设计>以Python3.5版本作为教学版,针对初学者的特点,分为五篇内容进行全面讲解:第壹篇为基础入门篇(第1-3章),介绍Python语言的基本功能:第二篇为有序和无序篇(第4-6章),介绍控制台应用程序和窗口应用程序:第三篇为标准函数篇(第7和8章),介绍标准函数库的应用:第四篇为面向对象篇(第9-11章),介绍封装.继承和多态:第五篇为高级篇(第12-

从零开始学python

自从20世纪90年代初Python语言诞生至今,它已被广泛应用于系统管理任务的处理和Web编程.今天就来给大家看看学Python的五大优势吧! NO.1 全球三大主流编程语言之一 python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库.它已经成为继Java.C++之后的第三大语言,相对于其他语言,它的特点是:简单易学.可移植.可扩展.可嵌入. 丰富的库.免费开源等, Python难度低于java,更适合初学编程者. NO.2 高效可靠的编程语言 我相信任何使用过 Python

从零开始学Python第八周:网络编程基础(socket)

Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 套接字是一个双向的通信信道的端点.套接字可能在沟通过程,进程之间在同一台机器上,或在不同的计算机之间的进程 要创建一个套接字,必须使用Socket模块的socket.socket()方法 在socket模块中的一般语法: s = socket.

Python重要文献参考_摘自从零开始学Python

开发相关网站: stackoverflow.com --在这里可以提问,可以查看答案.一般如果有问题,先在这里查找,多能找到非常满意的结果,至少有很大启发:在某国有时候有些地方可能不能访问,需要科学上网.好东西,一定不会让你轻易得到,也不会让任何人都得到. Python 中的 staticmethod 和 classmethod 的差异(题名). 原载: http://pythoncentral.io/difference-between-staticmethod-and-classmethod

从零开始学Python第一周:Python基础(上)

Python语法基础(上) 一,Python的变量 (1)创建变量 变量的含义:存储信息的地方 创建变量并赋值 x = 1 print x x = 123 #再次赋值 print x (2)使用变量 x = 1 y = 2 z = 3 print x,y,x*y,z (3)变量的命名规则 由字母,数字,下划线组成 不能以数字开头 不能使用Python关键字 错误的变量命名举例: #name = 1 3k = 1 print = 1 英文字母大小写敏感,例如:m与M不同 m = 1 print M

从零开始学Python数据分析

第1章 Python环境搭建与使用 1.1 Anaconda的安装和使用 1.1.1 Anaconda的安装 1.1.2 Anaconda的使用 1.包管理 2.环境管理 1.2 Jupyter Nottebook的使用 1.2.1 更改工作空间 1.2.2 界面介绍与 1 1 + 2 2 # 输出:3 1 for i in range(5): 2 print(i) 3 # 输出:0 4 1 5 2 6 3 7 4 原文地址:https://www.cnblogs.com/wssys/p/102

从零开始学JAVA DAY3

System.out.print()最后输出没有回车 System.out.println()最后输出有回车 System.out.print() 输出格式是拼接型的 比如输出1+2=3 System.out.print(1+"+"+2+"="+3); 形参的三种形式 int,double/float,boolean 数组定义 int[] a = new int[5] int[] a = new int[]{1,2,3,4} 数组的长度 a.length a是存在栈

小白从零开始学编程--python安装与环境搭建

前言 从2020年3月份开始,计划写一系列文档--<小白从零开始学编程>,记录自己从0开始学习的一些东西. 第一个系列:python,计划从安装.环境搭建.基本语法.到利用Django和Flask两个当前最热的web框架完成一个小的项目 第二个系列:可能会选择Go语言,也可能会选择Vue.js.具体情况待定,拭目以待吧... python安装与配置 python2 在2020年初开始已经不再维护,所以学习只讨论python3 windows环境 下载python3安装包 到官方网站下载选择合适