Python <基础>温故而知新

九道练习题+1道面试题

一、元组和列表的区别?

二、python中分割列表用什么方式?

三、python中怎么进行多行注释?

四、实现一个函数,传入任意一个整数返回其阶乘的值,传入值必须小于10?

五、给定{1:'v1', 4:'k4', 3:'s3', 2:'b2'},根据其键值进行排序?

六、三种字符串格式化输出

七、三种打开文件的方式

八、解析列表和字典排序

九、列表解析示例

十、面试题


一、元组和列表的区别?

1、元组

  • 元组是不可变的数据类型;

  • 元组用()表示,用逗号","进行分割每一项;

  • 元组支持的方法

#元组支持以下三种属性方法
tuple.count  tuple.index  tuple.mro

(1)tuple.count
T.count(value) -> integer -- return number of occurrences of value
返回值的类型为整数,返回value出现的次数。

(2)tuple.index
T.index(value, [start, [stop]]) -> integer -- return first index of value.
Raises ValueError if the value is not present.
返回值为整数,返回值所对应的索引号,如果值不存在则抛出异常。

2、列表

  • 列表是可变的数据类型;

  • 列表用[]表示,用逗号","进行分隔每一项;

  • 列表支持更多的方法

#列表支持以下十种属性方法
list.append   list.extend   list.insert   list.pop      list.reverse  
list.count    list.index    list.mro      list.remove   list.sort 

(1)list.append
L.append(object) -- append object to end
增加object(元素)到列表的末尾

(2)list.extend
L.extend(iterable) -- extend list by appending elements from the iterable
从扩展列表通过添加元素的迭代器

(3)list.insert
L.insert(index, object) -- insert object before index
在指定的索引(index)前添加object(元素)

(4)list.pop
L.pop([index]) -> item -- remove and return item at index (default last).
Raises IndexError if list is empty or index is out of range.
通过索引删除列表中的元素并返回索引对应列表中的元素,如果index为空默认删除列表中的最后一个元素并显示返回值为要删除的元素。
如果列表为空或者索引超出了范围则抛出异常。


(5)list.reverse
L.reverse() -- reverse *IN PLACE*
反向显示列表,此参数直接更改了源列表,换句话来说也就是源列表发生变化。

(6)list.count
L.count(value) -> integer -- return number of occurrences of value
返回值的类型为整数,返回value出现的次数。

(7)list.index
L.index(value, [start, [stop]]) -> integer -- return first index of value.
Raises ValueError if the value is not present.
返回值为整数,返回值所对应的索引号,如果值不存在则抛出异常。

(8)list.mro
mro() -> list
return a type's method resolution order

(9)list.remove
L.remove(value) -- remove first occurrence of value.
Raises ValueError if the value is not present.
移除列表中第一个出现的值,如果值没有出现则抛出异常

(10)list.sort
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
列表排序,这个方法参数比较多会在后面举例加以说明

二、python中分割列表用什么方式?

到现在也没有明白这道题是什么意思?我就按照自已的意思来理解说吧...

(1)string to list

#字符串到列表
S.split([sep [,maxsplit]]) -> list of strings    
Return a list of the words in the string S, using sep as the
delimiter string.  If maxsplit is given, at most maxsplit
splits are done. If sep is not specified or is None, any
whitespace string is a separator and empty strings are removed
from the result.
#由字符串分割成的列表
#返回一组使用分隔符(sep)分割字符串形成的列表。如果指定最大分割数,则在最大分割时结束。如果分隔符未指定或者为none,则分隔符默认为空格。

s = 'hello world.welcome to beijing...'
s.split()    --->['hello', 'world.welcome', 'to', 'beijing...']
splilt(".")  --->['hello world', 'welcome to beijing', '', '', '']

(2)list to list

#列表到列表一般用切割的方式
l = ['jerry',25,'male','tom',23,'male']
info1 = l[:3]  ---> ['jerry', 25, 'male']
info2 = l[3:]  ---> ['tom', 23, 'male']

三、python中怎么进行多行注释?

#多行注释用三个单引号或者三个双引号
print """
Hello world. Welcome to BeiJing.
My name is zhengyansheng,25 year old, sex is male.
Thank You!!!
"""

四、实现一个函数,传入任意一个整数返回其阶乘的值,传入值必须小于10?

#定义一个函数
def Factorial(n):
    if n == 1:
        return  1
    elif n >=10:
        return 'Condition must be n < 10'
    else:
        return Factorial(n-1)*n

五、给定{1:'v1', 4:'k4', 3:'s3', 2:'b2'},根据其键值进行排序?

1、先看帮助参数

sorted
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
返回值为一个新的列表,源列表没有变化

2、字典按值排序

d = {1:'v1', 4:'k4', 3:'s3', 2:'b2'}
正序:
sorted(d.iteritems(),key=lambda d:d[1])
倒叙:
sorted(d.iteritems(),key=lambda d:d[1],reverse=True)

六、三种字符串格式化输出

1、元组占位符(常用方式)

user = ('zhengyansheng','male',25,23.6975, 25.22222,25.3333)
"I am %s, sex is %s, %d year old, other1 is %f, other2 is %.2f, other3 is %+.2f" 	% user

2、字符串的format方法(很少用)

'i am is {name},sex is {sex}'.format(name='zhengyansheng',sex='male')

3、字典格式化字符串(常用方式)

MobilePhone = {'apple' : 6000, 'samsung' : 3000, 'huawei':2000, 'tcl' : 1000}
"apple is %(apple)d,samsung is %(samsung)d,huawei is %(huawei)d,tcl is %(tcl)d" % MobilePhone

七、三种打开文件的方式

方式1:
fd = open('/path/filename')
fd.read() | fd.readline() | fd.readlines()
for ......
fd.close()

方式2:
with open('/path/filename') as fd:
    fd.read() | fd.readline() | fd.readlines()
	for ......
	
方式3:
for line in open('/path/filename')
    print line

八、解析列表和字典排序

学过python的朋友都应该知道字典是无序的,但是为什么群上还有那么多群友在讨论如何对字典进行排序呢?

字典本身是不能排序的,但是我们可以对字典的中按key或者value进行排序。

(1)list

list
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
直接修改原始的列表

(2)dict

sorted
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
生成一个新的列表,原来的列表没有变化

iterable:是可迭代类型;
cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True 或者 reverse = False,有默认值。
返回值:是一个经过排序的可迭代类型,与iterable一样。
注;一般来说,cmp和key可以使用lambda表达式。


sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。


案例解析说明:

sorted
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
dic = {1:'v1', 4:'k4', 3:'s3', 2:'b2'}

#将字典类型的dic通过iteritems方法转换成了元组组成的列表
>>> [i for i in dic.iteritems()]		
[(1, 'v1'), (2, 'b2'), (3, 's3'), (4, 'k4')]

cmp:
>>> sorted(dic.iteritems(),cmp=lambda x,y:cmp(x[1],y[1]),reverse=False)
[(2, 'b2'), (4, 'k4'), (3, 's3'), (1, 'v1')]

key
>>> sorted(dic.iteritems(),key=lambda x:x[1],reverse=False)
[(2, 'b2'), (4, 'k4'), (3, 's3'), (1, 'v1')]

cmp和key都可以做为比较的对象
cmp在比较的时候需要传递2个参数,而key只需要传递一个参数。
cmp在比较的时候需要每个元素一一比较,而key只需要比较一次就可以了。


dict排序除了sorted函数外还有另外一种简易的方法就是用Python的内置模块operator。

from operator import itemgetter
sorted(dic.iteritems(), key=itemgetter(1))#0表示key,1表示value

模块的文档说明查看请点击:https://docs.python.org/3/library/operator.html


九、列表解析示例

需求:读取本地/etc/passwd文件对其进行格式化输出,要求得到这种效果;

#以简化输出内容
[{'name': 'root', 'uid': '0'},
 {'name': 'bin', 'uid': '1'},
 {'name': 'ntp', 'uid': '38'}]

1、传统方式

result = []
for line in open('/etc/passwd'):
    userinfo = {}
    if not line.startswith('#'):
        token = line.strip('\n').split(':')
        userinfo['name'] = token[0]
        userinfo['id'] = token[2]
        result.append(userinfo)
print result

2、列表解析方式

[{'name':line.split(':')[0],'uid':line.split(':')[2]} for line in open('/etc/passwd') if not line.startswith('#')]

从上面这个示例中,可以很方便的说明列表解析用起来更简单方便...

十、面试题

大家不要测试,凭着自已的印象去说出答案???

问题:

['zhengyansheng',25,'male','cn'][10:]

这个列表切割后的结果是什么?会抛出异常吗?


任何变化都不会发生在一夜之间

*****很多人都想拥有精美的房子、漂亮的汽车和理想的伴侣;但是这些东西都需要用时间和不懈的努力才能得到,甚至有些人要花费毕生的实际才能实现。那些成功的人都知道,哪怕每天只花费很小的努力,日积月累,你也会实现一些伟大的目标,任何变化都不会发生在一夜之间。

本文出自 “郑彦生” 博客,转载请与作者联系!

你可能感兴趣的:(python)