Python_day3

 

Python

PHP

list切片

从索引a切到索引b,不包括b

[a:b]

当a为0的时候可以省略[:b]

如果到最后:[a:]

l = [1,2,3,4,5,6,7,8,9]

s = l[0:3]

print(s)

支持倒数切片:

x = l[-2:]

print(x)

最后一个数的索引可以写成-1

$l = [1,2,3,4,5,6,7,8,9];

$s = array_slice($l,0,3);

print_r($s)

区别:Python是切索引到索引,PHP切索引后长度

list跳位切片(跳过num-1个数字取值)

[a:b:num]

a,b都不填的时候为全部

[:]list

[::num]list跳位切片

l = [1,2,3,4,5,6,7,8,9]

dump = l[::2]

print(dump)

 

tuple切片

tuple切片完之后还是一个tuple

tuple = (1,2,3,4,5)

print(tuple)

print(tuple[0:3])

 

字符串切片

(可以看成类似list切片)

str = "abcdefg"

print(str[:3])

$str = "abcdefg";

echo substr($str,0,3);

字符串首尾去空格

str.strip()

 

也可以利用递归自定义

def trim(s):

    if len(s) == 0:

        return ''

    else:

        if s[:1] == " ":

            return trim(s[1:])

        if s[-1:] == " ":

            return trim(s[:-1])

        return s

trim($str)

 

Python

PHP

迭代

(使用for遍历)

数值不能迭代

list、tuple、str

for i in list:

    pass

dict

d = {'a': 1, 'b': 2, 'c': 3}

for k in d:

    print(k)

for v in d.values():

    print(v)

for k,v in d.items():

    print(k,v)

 

判断是否可以迭代

from collections import Iterable

print(isinstance(d,Iterable))

 

list实现下标迭代

list = [1,2,3,4,5]

for k,v in enumerate(list):

    print(k,v)

 

特殊迭代

同时获取2个值

for x,y in [('a','b'),('c','d'),('e','f')]:

    print(x,y)

 

 

Python

PHP

列表生成式

[生成式 for 参数 in 可迭代变量]

简单列表生成:list(range(0,100))

 

生成一个[1,4,9…,100]列表

[x*x for x in range(1,11)]

循环后面可以跟判断

[x*x for x in range(1,11) if x%2 == 0]

双层循环组合列表生成

[m + n for m in 'ABC' for n in 'XYZ']

 

二参数获取生成式

d = {'x': 'A', 'y': 'B', 'z': 'C' }

[k + '=' + v for k, v in d.items()]

 

小写

[s.lower() for s in L]

 

打印文件夹中文件名列表

import os

list = [d for d in os.listdir('.')]

print(list)

 

 

Python

PHP

生成器generator

边循环一边计算的机制

列表生成式的[]换成()就可以生成一个简单的生成器

 

 

 

 

 

生成器的值获取

基本不用:next(generator)

常用:

for i in generator:

    pass

 

函数转换成生成器

print()改成yield()

 

生成器中return不再能够直接获取并打印,想要获取的话需要进行错误捕获

存在于StopIterationvalue

 

def fib(max):

    n,a,b = 0,0,1

    while n<max:

        yield(b)

        a,b = b,a+b

        n = n+1

generator = fib(5)

for i in generator:

    pass

当函数定义中包含yield关键字,就会变成生成器

 

杨辉三角


优化版本:使用列表生成式的方式

def triangles(n):
    ls = [1]
    while n>0:
        yield ls
        ls = [1] + [ls[i] + ls[i + 1] for i in range(len(ls) - 1)] + [1]
        n = n - 1

def triangles(n):

    yield [1]#如果是第一排就只有[1]

    start = 1

    while start < n:

        list = [1,1]

        start = start + 1

        if start > 2: #大于2排的时候获得上一排数据

            insert = triangles(start-1)#递归拿到含有上层数据的生成器

            for i in insert:

                #循环出上一层的数据

                if len(i) == start -1:

                    num = 0

                    #前后两个数据相加的组合为长度-1

                    len = len(i) - 1

                    while len > 0:

                        num = num + 1

                        len = len - 1

                        #每一个相加的组合插入一次到后面一层

                        list.insert(num, i[num-1] + i[num])

        yield list

 

 

Python

PHP

杨辉三角

生成式写法

def triangles(n):

    ls = [1]

    while n>0:

        yield ls

        ls = [1] + [ls[i] + ls[i + 1] for i in range(len(ls) - 1)] + [1]

        n = n - 1

 

迭代器

Iterator

可迭代对象Iterable

可以直接使用for进行循环的数据格式包括

list、tuple、set、dict、str、generator

迭代器Iterator

能够被next()函数调用

 

注意:generator都是iterator

list、tuple、set、dict、str虽然可迭代,但是不是迭代器

但是可以使用iter()函数进行格式转换

 













猜你喜欢

转载自blog.csdn.net/zhq_zvik/article/details/80203640