设为首页 收藏本站
查看: 1000|回复: 0

[经验分享] 云课堂-Python学习笔记(6)

[复制链接]

尚未签到

发表于 2015-11-30 12:38:13 | 显示全部楼层 |阅读模式
  一、列表(List)
  1、内建数据结构,用来存储一系列元素,如:   



1 Lst[0] = 5.4
2 Lst[3] False
3 Lst[1:3]=['Hello',2]
  2、列表与字符串的相同点:
  索引([]运算符)
  切片([:])
  拼接(+)和重复(*)
成员(in运算符)
长度(len()函数)
循环(for)
不同点:
  使用[]生成,元素之间用逗号分隔
可以包含多种类型的对象,字符串只能是字符
内容是可变的,字符串是不可变的



1 >>> list=[5.4,'Hello',2]
2 >>> list[0] = 'a'
3 >>> list
4 ['a', 'Hello', 2]
5 >>> list[0:2]=[1.2,3,5.6]
6 >>> list
7 [1.2, 3, 5.6, 2]
8 >>> list.append('pyhton')
9 >>> list
10 [1.2, 3, 5.6, 2, 'pyhton']
11 >>> list.extend('zimengfang')
12 >>> list
13 [1.2, 3, 5.6, 2, 'pyhton', 'z', 'i', 'm', 'e', 'n', 'g', 'f', 'a', 'n', 'g
14 >>> list.pop(5)
15 'z'
16 [1.2, 3, 5.6, 2, 'pyhton', 'i', 'm', 'e', 'n', 'g', 'f', 'a', 'n', 'g']
17 >>> list.sort()
18 >>> list
19 [1.2, 2, 3, 5.6, 'a', 'e', 'f', 'g', 'g', 'i', 'm', 'n', 'n', 'pyhton']
20 >>> list.reverse()
21 ['pyhton', 'n', 'n', 'm', 'i', 'g', 'g', 'f', 'e', 'a', 5.6, 3, 2, 1.2]
  3、示例、输入10个数字,求其平均值



1 nums = []
2 for i in range(10):
3     nums.append(float(raw_input()))
4 avg = sum(nums) / (len(nums))
5 print avg
  sum()为内建函数,max,min等
  二、1、列表赋值



1 a = [1, 2, 3]
2 b = a // 原来列表
3 b[1] = 4
4 print a[1]
5
6 a = [1, 2, 3]
7 b = a[:] //生成一个新的列表
8 b[1] = 4
9 print a[1]
  2、交换列表中两个元素的值



1  1 def swap(a,b) :
2  2     tmp = a
3  3     a= b
4  4     b = tmp
5  5 x = 10
6  6 y = 20
7  7 swap(x,y)
8  8 print x,y
9  9
10 10 //下面才可以
11 11 def swap(list,a,b):
12 12     temp = list[a]
13 13     list[a] = list
14 14     list = temp
15 15 x = [10,20,30]
16 16 swap(x,0,1)
17 17 print x
  3、查找:在列表中查找一个值,并返回该值第一次出现的位置,不存在返回-1



1 def search(list,x):
2     for i in range(len(list)):
3         if list == x:
4             return i
5     retern -1
6
7 list = [12,11,4,6,9]
8 print search(list,6);
9
10 print list.index(6) //不存在异常
自定义的search函数,如果数字不存在返回-1,而函数index,不存在会出现异常
  三、时间复杂度
  1、量化一个算法的运行时间为输入的长度
  2、不需要显示的计算这些常数
  3、大O表示,只保留高阶项
    4n+4 = O(n)
    137n + 271 = O(n)
    n*n*n + 3n = O(n*n)
  4、线性查找时间复杂度为:O(n)
  四、二分查找:
  1、编写函数bi_search,输入一个有序(由大到小)列表和一个值,如果该值在列表中,则返回相应的位置,否则返回-1
  2、考虑以下3中情况:
    如果输入值小于列表中间的元素,则只需在列表前半部分继续查找
    如果输入值大于列表中间的元素,则只需在列表后半部分继续查找
    如果输入值等于列表中间的元素,返回该值



1 def bi_search(list,x) :
2     low = 0
3     high = len(list)-1
4     while low <= high:
5         mid = (low + high)/2
6         if list[mid] == x:
7             return mid
8         elif list[mid] > x:
9             high = mid -1
10         else :
11             low = mid + 1
12     return -1
13     
14 list = [2,6,8,15,20]
15 print bi_search(list,15)
16
17 时间复杂度O(log2 n)
  五、排序
  1、选择排序,步骤:i)、找到最小的元素、删除 ii)、把最小的元素插入第一位置 iii)、重复上面两步



1 def selection_sort(list):
2     for i in range(len(list)):
3         min_index = i
4         for j in range(i+1,len(list)):
5             if list[j] < list[min_index]:
6                 min_index = j
7         list.insert(i,list.pop(min_index))
8         
9 list = [4,15,2,6,8,20]
10 selection_sort(list)
11 print list
方法二如下:


1 def swap(list,a,b):
2     temp = list[a]
3     list[a] = list
4     list = temp
5     
6 def selection_sort2(list):
7     for i in range(len(list)):
8         min_index = i
9         for j in range(i+1,len(list)):
10             if list[j] < list[min_index]:
11                 min_index = j
12         swap(list,i,min_index)
13         
14 list = [4,15,2,6,8,20]
15 selection_sort2(list)
16 print list
  2、冒泡排序    



1 def swap(list,a,b):
2     temp = list[a]
3     list[a] = list
4     list = temp
5
6 def bubble_sort(list):
7     top = len(list)-1
8     is_exchange = True
9     while is_exchange :
10         is_exchange = False
11         for i in range(len(list)-1):
12             if list > list[i+1]:
13                 is_exchange = True
14                 swap(list,i,i+1)
15         top -= 1
16        
17 list = [4,15,2,6,8,20]
18 bubble_sort(list)
19 print list
  3、内建函数:
  sorted(list)
    list.sort()
    quicksort()
  六、嵌套列表、示例:计算所有学生的平均分



1 students = [['zhang',84],['wang',77],['li',100],['zhao',55]]
2
3 s = 0
4 for student in students:
5     s += student[1]
6 print float(s) / len(students)
  1、列表解析或推导
  一种由原列表创建新列表的简洁方法:[表达式 for 变量 in 列表 if条件]



1 list = []
2 for x in range(1,10):
3 list.append(x **2)
4 print list
5 列表解析:
6 list = [x**2 for x in range(1,10)]


1 列表推导实现求平均分
2 sum([x[1] for x in students])/len(students)
3
4 students = [['zhang',84],['wang',77],['li',100],['zhao',55]]
5 print sum([x[1] for x in students])/len(students)
6
7 列表解析对输入数字x的因数求和
8 sum([i for i in range(1,x+1) if(x%i ==0)]
9
10 n = int (raw_input());
11 print sum([i for i in range(1,n+1) if n%i ==0 ])
  七、按成绩从高到底排序:



1 按成绩从高到底排序:
2 students = [['zhang',84],['wang',77],['li',100],['zhao',55]]
3
4 def f(a):    //很简单,只返回a的1号元素
5     return a[1]
6
7 students.sort(key=f,reverse=True)
8
9 print students
  其实有内嵌函数lambda函数
  1、匿名函数



1 >>> def f(x):return x**2
2 ...
3 >>> print f(8)
4 64
5 >>> g = lambda x:x**2
6 >>>
7 >>> print g(8)
8 64
9 >>>
  2、lambda函数实现按成绩排序



1 students = [['zhang',84],['wang',77],['li',100],['zhao',55]]
2 students.sort(key=lambda x:x[1],reverse=True)
3 print students
  练习:给定列表 L = [1, 2, 3, 4],将列表转换为字符串 '1234'



1 方法一
2 s = ''
3 list = [1,2,3,4]
4 n = 0
5 while n<len(list):
6     s += str(list[n])
7     n+=1
8 print s
9
10 方法二:
11 print ''.join([str(i) for i in list])
  八、测试题
  1、编写程序,完成下列题目:(3分)
题目内容:
定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数(1不是素数),并返回一个按照升序排列的素数列表。使用递归来实现一个二分查找算法函数bi_search(),该函数实现检索任意一个整数在 prime() 函数生成的素数列表中位置(索引)的功能,并返回该位置的索引值,若该数不存在则返回 -1。
  输入格式:
第一行为正整数 n
接下来若干行为待查找的数字,每行输入一个数字
  输出格式:
每行输出相应的待查找数字的索引值
  输入样例:
10
2
4
6
7
  输出样例:
0
-1
-1
3
时间限制:500ms内存限制:32000kb



1 L1 = []
2 n = int (raw_input())
3 for i in range(2, n):
4     list = []
5     for x in range(2, i/2 + 1):
6         if i % x == 0:
7             list.append(x)
8     if not list:
9         L1.append(i)
10
11
12 def bi_search(list,x) :
13     low = 0
14     high = len(list)-1
15     
16     while low <= high:
17         mid = (low + high)/2
18         if list[mid] == x:
19             return mid
20         elif list[mid] > x:
21             high = mid -1
22         else :
23             low = mid + 1
24     return -1
25     
26 numbers = []
27 while(True):
28     input = raw_input()
29     if input.upper() == "":
30         break
31     numbers.append(int(input))
32
33 for i in range(0,len(numbers)):
34     print bi_search(L1,numbers)
  2编写程序,完成下列题目:(2分)
题目内容:
帕斯卡三角形,又称杨辉三角形是二项式系数在三角形中的一种几何排列。帕斯卡三角形通常从第0行开始枚举,并且每一行的数字是上一行相邻两个数字的和。在第0行只写一个数字1,然后构造下一行的元素。将上一行中数字左侧上方和右侧上方的数值相加。如果左侧上方或者右侧上方的数字不存在,用0替代。下面给出6行的帕斯卡三角形:
     1
    1 1
   1 2 1
  1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
编写程序,输入帕斯卡三角形的高度 n,然后生成和上面例子一样风格的三角形。
  输入格式:
一个正整数 n
  输出格式:
相应高度的帕斯卡三角形,两个数字之间有一个空格
  输入样例:
6
  输出样例:
     1
    1 1
   1 2 1
  1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
  时间限制:500ms内存限制:32000kb



1 NUM = int(raw_input())
2 def printLine(lineList):
3     lineList = [str(tmpNum) for tmpNum in lineList]
4     print("%s%s" % (" " * (NUM - len(lineList)), " ".join(lineList)))
5  
6 for i in range(NUM):
7      if i < 2:
8          list = [1] * (i + 1)
9      else:
10          list[1:-1] = [(tmpNum + list[j]) for j, tmpNum in enumerate(list[1:])]
11      printLine(list)
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145368-1-1.html 上篇帖子: python 书籍推荐 三 下篇帖子: python核心编程-第五章-个人笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表