01-07 31—35

______egon新书python全套来袭请看:https://egonlin.com/book.html

31、写一个列表生成式,产生一个公差为11的等差数列

1.print([x*11 for x in range(10)])

32、给定两个列表,怎么找出他们相同的元素和不同的元素?

1. list1 = [1,2,3]
2. list2 = [3,4,5]
3. set1 = set(list1)
4. set2 = set(list2)
5. print(set1&set2)
6. print(set1^set2)

33、请写出一段Python代码实现删除一个list里面的重复元素?

比较容易记忆的是用内置的set:

1. l1 = ['b','c','d','b','c','a','a']
2. l2 = list(set(l1))

如果想要保持他们原来的排序:
用list类的sort方法:

1. l1 = ['b','c','d','b','c','a','a']
2. l2 = list(set(l1))
3. l2.sort(key=l1.index)
4. print(l2)

也可以这样写:

1. l1 = ['b','c','d','b','c','a','a']
2. l2 = sorted(set(l1),key=l1.index)
3. print(l2)

也可以用遍历:

1. l1 = ['b', 'c', 'd', 'b', 'c', 'a', 'a']
2. l2 = []
3. for i in l1:
4. 	if not i in l2:
5. 		l2.append(i)
6. print(l2)

34、下面这段代码的输出结果是什么?请解释?

1. def extendlist(val, list=[]):
2. 	list.append(val)
3. 	return list
4. list1 = extendlist(10)
5. list2 = extendlist(123, []
6. list3 = extendlist('a')
7. print("list1 = %s" %list1)
8. print("list2 = %s" %list2)
9. print("list3 = %s" %list3)
10. 输出结果:
11. list1 = [10, 'a']
12. list2 = [123]
13. list3 = [10, 'a']

新的默认列表只在函数被定义的那一刻创建一次。当extendList被没有指定特定参数list调用时,这组list的值
随后将被使用。这是因为带有默认参数的表达式在函数被定义的时候被计算,不是在调用的时候被计算。

35、将以下3 个函数按照执行效率高低排序

1. def f1(lIn):
2. 		l1 = sorted(lIn)
3. 		l2 = [i for i in l1 if i<0.5]
4. 		return [i*i for i in l2]
5. def f2(lIn):
6. 		l1 = [i for i in l1 if i<0.5]
7. 		l2 = sorted(l1)
8. 		return [i*i for i in l2]
9. def f3(lIn):
10. 	l1 = [i*i for i in lIn]
11. 	l2 = sorted(l1)
12. 	return [i for i in l1 if i<(0.5*0.5)]

按执行效率从高到低排列:f2、f1和f3。
要证明这个答案是正确的,你应该知道如何分析自己代码的性能。
Python中有一个很好的程序分析包,可以满足这个需求。

1. import random
2. import cProfile
3. lIn = [random.random() for i in range(100000)]
4. cProfile.run('f1(lIn)')
5. cProfile.run('f2(lIn)')
6. cProfile.run('f3(lIn)')
posted @ 2019-10-22 19:47  小猿取经-林海峰老师  阅读(2190)  评论(3编辑  收藏  举报