您的位置:首页 > 编程语言 > Python开发

Python day5:列表生成式,生成器,迭代器

2018-02-03 16:54 701 查看
1.列表生成式

生成有一定规律的列表可以使用列表生成式

如生成1到10的列表L=[x for x in range(1,11)]

生成1到10之中偶数的列表L=[x for x in range(1,11) if x%2==0]

生成1到10之中数的平方列表L=[x*x for x in range(1,11)]

多重循环:L=[m+n for m in range(1,11) for n in range(11,21)]

L=['ASUS','Dell','Leon']
print([s.lower() for s in L])
L1 = ['Hello', 'World', 18, 'Apple', None]
L2=[s.lower() if isinstance(s,str) else s for s in L1 ]
print(L2)
L3=[s.lower() for s in L1 if isinstance(s,str)]
print(L3)

isinstance(x,str)可以用来判断是否为字符串,是则返回True,不是返回False.这是一个内置函数(from collections import Iterable可以判断是否可以迭代)

留意L2的if else语句,类似于C语言的三目运算 a if ... else b for x in L 其中a,b为x的不同形式

2.生成器

<法一>将列表生成式的[]换为(),如g=(x*x for x in range(1,11))

<法二>

待续,此处不是很懂

s = (x * x for x in range(5))
print(s)
for x in s:
print(x)

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(10)
print('fib(10):', f)
for x in f:
print(x)

# call generator manually:
g = fib(5)
while 1:
try:
x = next(g)
print('g:', x)
except StopIteration as e:
print('Generator return value:', e.value)
break


3.迭代器

list,tuple,dict,str,generator都可以与for循环连用,成为可迭代,Iterable

而如果还能够使用next()返回下一个对象,则称为迭代器,generator是一种迭代器,称为Iterator.迭代器无法预先知道序列长度, 可以表示无穷长的序列, 例如全体自然数. 而list,tuple,dict,str不行

判断函数:

from collections import Iterable
print(isinstance([],Iterable))
print(isinstance((),Iterable))
print(isinstance({},Iterable))
print(isinstance((x*x for x in range(1,11)),Iterable))
from collections import Iterator
print(isinstance([],Iterator))
print(isinstance((),Iterator))
print(isinstance({},Iterator))
print(isinstance((x*x for x in range(1,11)),Iterator))

True

True

True

True

False

False

False

True

from collections import Iterable, Iterator

def g():
yield 1
yield 2
yield 3

print('Iterable? [1, 2, 3]:', isinstance([1, 2, 3], Iterable))
print('Iterable? \'abc\':', isinstance('abc', Iterable))
print('Iterable? 123:', isinstance(123, Iterable))
print('Iterable? g():', isinstance(g(), Iterable))

print('Iterator? [1, 2, 3]:', isinstance([1, 2, 3], Iterator))
print('Iterator? iter([1, 2, 3]):', isinstance(iter([1, 2, 3]), Iterator))
print('Iterator? \'abc\':', isinstance('abc', Iterator))
print('Iterator? 123:', isinstance(123, Iterator))
print('Iterator? g():', isinstance(g(), Iterator))

# iter list:
print('for x in [1, 2, 3, 4, 5]:')
for x in [1, 2, 3, 4, 5]:
print(x)

print('for x in iter([1, 2, 3, 4, 5]):')
for x in iter([1, 2, 3, 4, 5]):
print(x)

print('next():')
it = iter([1, 2, 3, 4<
ac18
span style="color:#cc7832">, 5])
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))

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

# iter each key:
print('iter key:', d)
for k in d.keys():
print('key:', k)

# iter each value:
print('iter value:', d)
for v in d.values():
print('value:', v)

# iter both key and value:
print('iter item:', d)
for k, v in d.items():
print('item:', k, v)

# iter list with index:
print('iter enumerate([\'A\', \'B\', \'C\']')
for i, value in enumerate(['A', 'B', 'C']):
print(i, value)

# iter complex list:
print('iter [(1, 1), (2, 4), (3, 9)]:')
for x, y in [(1, 1), (2, 4), (3, 9)]:
print(x, y)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: