路漫漫其修远兮
吾将上下而求索

python学习:切片,迭代

切片
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
print (L)
print (L[:3])
print (L[-2:-1])

L = list (range(100))
从第10个元素开始,包括第10个元素,到第20个元素,不包括第20个元素
print (L[10:20])
从刚开始到第10个元素,不包括第10个元素,步进为2
print (L[:10:2])
print (L[::5])
L = (0,1,2,3,4,5)
print (L[:3])
a = 'abcdef'[:3]
print (a)

['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
['Michael', 'Sarah', 'Tracy']
['Bob']
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 2, 4, 6, 8]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
(0, 1, 2)
abc


列表生成,Python内置的非常简单却强大的可以用来创建list的生成式
list(range(1, 11))
[x * x for x in range(1, 11)]   #将模块内的内容放到前面去了
[x * x for x in range(1, 11) if x % 2 == 0]   #先执行后面的if,在执行前面的相乘


迭代
字典迭代
默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()

d = {'a':1, 'b':2, 'c':3}
print(d.values())
print(d.items())
for i in d:
    print(i)

结果:
dict_values([1, 2, 3])
dict_items([('a', 1), ('b', 2), ('c', 3)])
a
b
c

    
字符串迭代
>>> for ch in 'ABC':
...     print(ch)
...
A
B
C


判断是否为可迭代对象
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False


列出当前目录下的所有文件和目录名,赋值给list
dir = [d for d in os.listdir('.')]

多个参数进行计算
d = {'x': 'A', 'y': 'B', 'z': 'C' }
[k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']


用内建的isinstance函数可以判断一个变量是不是字符串:
>>> x = 'abc'
>>> y = 123
>>> isinstance(x, str)
True
>>> isinstance(y, str)
False


生成器:在循环的过程中不断推算出后续的元素,不必创建完整的list,从而节省大量的空间
只要把一个列表生成式的[]改成(),就创建了一个generator
generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值
generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值

g = (x*x for x in range(10))
>>> for n in g:
...     print(n)
0
1
4
9
16
25
36
49
64
81



注意,赋值语句:
a, b = b, a + b
相当于:
t = (b, a + b) # t是一个tuple
a = t[0]
b = t[1]


下面是正确的方式,也是迭代对象
g = (x*x for x in range(10))
for n in g:
    print (n)


下面也是生成器
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'
    
f = fib(6)
f
<generator object fib at 0x104feaaa0>   
    
    
下面的函数只要有yield,就是一个生成器
def odd():
    print ('step1')
    yield 1
    print('step2')
    yield 2
    print ('step3')
    yield 3

for i in odd():
    print (i)
    print ('='*10)

step1
1
==========
step2
2
==========
step3
3
==========


请注意区分普通函数和generator函数,普通函数调用直接返回结果:
>>> r = abs(6)
>>> r
6
generator函数的“调用”实际返回一个generator对象:
>>> g = fib(6)
>>> g
<generator object fib at 0x1022ef948>

未经允许不得转载:江哥架构师笔记 » python学习:切片,迭代

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址