|
Python |
PHP |
list slice Cut from index a to index b, excluding b [a:b] [:b] can be omitted when a is 0 If at the end: [a:] |
l = [1,2,3,4,5,6,7,8,9] s = l[0:3] print(s) Reciprocal slices are supported: x = l[-2:] print(x) The index of the last number can be written as -1 |
$l = [1,2,3,4,5,6,7,8,9]; $s = array_slice($l,0,3); print_r($s) Difference: Python cuts the index to the index, PHP cuts the length after the index |
list skip slice (skip num-1 number values) [a:b:num] When neither a nor b is filled in, it is all [:] Original list [::num] The original list jump slice |
l = [1,2,3,4,5,6,7,8,9] dump = l[::2] print(dump) |
|
tuple slice After the tuple is sliced, it is still a tuple |
tuple = (1,2,3,4,5) print(tuple) print(tuple[0:3]) |
|
string slice (It can be seen as a similar list slice) |
str = "abcdefg" print(str[:3]) |
$str = "abcdefg"; echo substr($str,0,3); |
Remove spaces from beginning and end of string |
str.strip()
You can also use recursion to customize 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 |
iterate (traversing with for) Values cannot be iterated |
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) |
|
Determine whether it is possible to iterate |
from collections import Iterable print(isinstance(d,Iterable)) |
|
List implements subscript iteration |
list = [1,2,3,4,5] for k,v in enumerate(list): print (k, v) |
|
special iteration Get 2 values at the same time |
for x,y in [('a','b'),('c','d'),('e','f')]: print(x,y) |
|
|
Python |
PHP |
list comprehension [ Generation for parameter in iterable variable] |
Simple list generation: list(range(0,100))
generate a list of [1,4,9…,100] [x*x for x in range(1,11)] The loop can be followed by judgment [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不再能够直接获取并打印,想要获取的话需要进行错误捕获 存在于StopIteration的value中
|
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): |
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()函数进行格式转换 |
|