Python学习笔记(一)——Python的某些高级特性

一、切片

  对于可递归对象,python提供了切片这一方法对其进行取值。

  而可递归对象是指可以利用for循环从其中取出值得对象,例如list列表、tuple元组、字符串等。

  现在用一个例题来记忆:利用切片操作实现一个trim()函数,去除字符串首位的空格。(PS:自己实现后可以搜索一下str的strip()方法)。

(1)

#easy 版本:这种版本下,默认首尾只有一个空格
def trim(s):
    try:
        s = s[1:-1]
        return s
    except:
        print("Your input is not a string.")
    
a_string = trim('  helloworld ')
print(a_string)

(2)

#medium 版本:首尾可能有不止一个空格 

def trim(s):
    try:
        #去掉开头的所有空格
        while True:
            if s[0] == ' ':
                s = s[1:]
            else:
                break 
        #去掉结尾所有空格
        while True:
            if s[-1] == ' ':
                s = s[:-1]
            else:
                break 
        return s      
    except:
        print("Your input is not a string.")

a_string = trim('   helloword   ')
print(a_string+'oh my god')

(3)

#高级 版:去除所有空格
#没有使用set方法在于,我们是要去除空格,而不是重复的元素
def trim(s):
    L = list(s[:])
    for i in s:
        if i == " ":
            L.remove(i)

    return L

a_string = "".join(trim('   hello the beautiful world   '))
print(a_string)

二、迭代

  迭代,对于list、tuple,通过for循环来“遍历”,这种遍历就叫做迭代。

  在Python中,迭代是通过for。。。in来完成。而很多其他的语言是通过下标

  当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他什么数据类型。

#判断该对象是否是一个可迭代对象
from collections import Iterable
print(isinstance('abc',Iterable))
print(isinstance(123,Iterable))


#利用python内置函数 enumerate函数实现把一个list变成索引-元素对
for i, value in enumerate(['A','B','C']):
    print(i,value)

#在for循环中,同时引用两个变量
for x,y in [(1,2),(3,4),(5,6)]:
    print(x,y)

#练习:使用迭代查找一个list中最小和最大值,并返回一个tuple

#自己创建循环
def findMinAndMax(L):
    max_0 = None
    min_0 = None
    #取最大值
    for i in L:
        if max_0 == None:
            max_0 = i
        else:
            if i > max_0:
                max_0 = i
    #取最小值
    for j in L:
        if min_0 == None:
            min_0 = j
        else:
            if j < min_0:
                min_0 = j

    return (max_0,min_0)

print(findMinAndMax([1,2,3,42,23,12,456,76,456]))
     
#利用内置方法,算法复杂度更低
def findMinAndMax(L):
    L_sorted = sorted(L)        
    max_0 = L_sorted[-1]
    min_0 = L_sorted[0]

    return (max_0,min_0)     

print(findMinAndMax([12,231,4342,45,23,5456,23]))

三、列表生成式(List Comprehensions)

L = list(range(1,101))

L_0 = []
for i in range(1,101):
    strings = str(i)+"*"+str(i)
    L_0.append(strings)

print(L_0)

  上面这一行代码实现了创建一个1,101的列表的操作,但是这也太复杂了!!完全不符合我们python优雅、简洁的哲学,所以Python就有了列表生成式。因为上面的循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list。

L = [ x * x for x in range(1,101)]
print(L)

  是不是特别简洁~~~,现在我们看看代码实例。

#写列表生成式时,把要生成的元素x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。
#for循环后面还可以加上if判断,这样我们就可以筛选:
L_0 = [x * x for x in range(1,101) if x % 2 == 0]
print(L_0)
  
#还可以使用两层循环,可以生成全排列
L_2 = [ m + n for m in 'ABC' for n in 'xyz']
print(L_2)

L_1 = [str(m)+"*"+str(n) for m in list(range(1,11)) for n in list(range(1,11))]
print(L_1)

#查看当前目录下的文件与文件夹
import os
print([d for d in os.listdir('.')])

#for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value
#所以在列表生成式中也可以使用两个变量来生成list
d = {'x':'A', 'y':'B', 'z':'C'}
L = [n+'='+m for m,n in d.items()]
print(L)

#把一个list中的所有字符串变成小写, 使用列表生成式的意义在于使算法复杂度比之于循环更低,并且代码更优雅
L = ['Hello', 'World', 'IBM', 'Apple']
L_1 = [s.lower() for s in L]
print(L_1)

#如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错
#使用内建的isinstance函数可以判断一个变量是不是字符串
#通过添加if语句保证列表生成式能正确地执行
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [ s.lower() for s in L1 if isinstance(s, str) ]
print(L2)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值