-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
3.5 Python 基础语法之高级特性 #4
Comments
切片(Slice)List有了切片(Slice)操作,很多需要取指定索引范围的地方,就不再需要循环来实现了。Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。 L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 取前 3 个: >>> L[0:3]
['Michael', 'Sarah', 'Tracy'] 前 5 个中,每隔一个取一个 >>> L[:5:2]
['Michael', 'Tracy', Jack'] Tupletuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple。 T = (0, 1, 2, 3, 4, 5)
>>> T[:3]
(0, 1, 2) 字符串字符串 >>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG' 参考 |
迭代(Iteration)如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。 任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环。在Python中,迭代是通过for ... in来完成的。 字典默认情况下,dict迭代的是key。 d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
print(key, ':', d[key])
for value in d.values():
print(value)
for key, value in d.items():
print(key, ':', value) 字符串字符串也是可迭代对象: for c in 'English':
print(c) 数组for num in [2, 56, 23]:
print(num)
# Python内置的enumerate函数可以把一个list变成索引-元素对
for i, value in enumerate([3, 56, 23]):
print(i, value)
for x, y in [(1, 1), (2, 3), (5, 8)]:
print(x, y) Iterable如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断: from collections.abc import Iterable
print(isinstance('abc', Iterable))
print(isinstance([1, 2, 3], Iterable))
print(isinstance(123, Iterable)) 参考 |
列表生成式(List Comprehensions)什么是列表生成式?列表生成式,是 Python 内置的非常简单却强大的可以用来创建 list 的生成式。 运用列表生成式,可以快速生成 list,可以通过一个 list 推导出另一个 list,而代码却十分简洁。 个人理解:列表生成式的作用有点类似于高阶函数,给定一个 list,提供一个变换操作或者筛选条件,生成一个新数组。 示例代码L1 = list(range(1, 11))
print(L1)
L2 = [x * x for x in range(1, 11)]
print(L2) 使用筛选条件: L3 = [x * x for x in range(1, 11) if x % 2 == 0]
print(L3) 使用双循环: L4 = [m + n for m in 'ABC' for n in 'XYZ']
print(L4) 使用两个变量来生成 list: d = {'baidu': 'www.baidu.com', 'tencent': 'www.qq.com', 'amazon': 'www.amazon.com'}
[k + '=' + v for k, v in d.items()]
print(d) 大写转小写: L5 = ['Hello', 'World', 'IBM', 'Apple']
L5_lower = [s.lower() for s in L5]
print(L5_lower) 打印当前目录下的所有文件名: import os
ls = [d for d in os.listdir('.')]
print(ls) |
生成器(Generator)在Python中,这种一边循环一边计算的机制,称为生成器(generator)。 创建生成器的两种方法1. 只要把一个列表生成式的
|
迭代器(Iterator)可迭代对象 VS. 迭代器可迭代对象可以直接作用于 for 循环的数据类型有以下几种:
这些可以直接作用于for循环的对象统称为可迭代对象(Iterable)。 生成器生成器不但可以作用于for循环,还可以被 可以被 几个知识点
为什么list、dict、str等数据类型不是Iterator?这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被 Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。 如何让自定义类也具备 Iterator 特性?跟 Objective-C 中实现 class Reverse:
"""Iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index] >>> rev = Reverse('spam')
>>> iter(rev)
<__main__.Reverse object at 0x00A1DB50>
>>> for char in rev:
... print(char)
...
m
a
p
s 参考 |
日期:2018.07.10 周二
The text was updated successfully, but these errors were encountered: