# 列表推导式

## 一维列表推导式

```nums = [1,2,3,4,5]
num_sqrt = [x*x for x in nums]
print(num_sqrt)
-----------------
[1,4,9,16,25]```
```#有限制的一维列表推导式
nums = [1,2,3,4,5]
num_sqrt = [x*x for x in nums if x&1==1]
print(num_sqrt)
-----------------
[1,9,25]```

## 二维列表推导式

```nums = [[1,2,3,4,5],[6,7,8,9,10]]
num_sqrt = [x for xx in nums for x in xx]
print(num_sqrt)
--------------------
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]```
```#有限制的二维列表推导式
nums = [[1,2,3,4,5],[6,7,8,9,10]]
num_sqrt = [x for xx in nums for x in xx if x&1==1]
print(num_sqrt)
-------------------
[1, 3, 5, 7, 9]```

# map()

```def fun(x):
return x*x
nums = [1,2,3,4,5]
#返回一个字典类型
num_sqrt = map(fun,nums)
print(num_sqrt)
a = [x for x in num_sqrt]
print(a)
----------------------
<map object at 0x000001D26306BC50>
[1, 4, 9, 16, 25]```

# iter

```import sys as sys
a = [x for x in range(1,1000)]
iter_a = iter([x for x in range(1,1000)])

print(sys.getsizeof(a),sys.getsizeof(iter_a),sep='\n')
------------------------------------
9024
56```

```#next 访问迭代器,像一个只会向后移动的指针，遍历过的不会在遍历
print(next(iter_a))
print(next(iter_a))
print(next(iter_a))
#for 循环也可以
b = iter([1,2,3])
a = [x for x in b]
print(a)
print(next(b))
---------------------
1
2
3
[1, 2, 3]
Traceback (most recent call last):
File "f:\C-and-Python-Algorithn\python\practice.py", line 47, in <module>
print(next(b))
StopIteration
#迭代器以遍历完,最后一条语句没有用```

# generator

```def fibonacci(n):            # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0  # a，b是数列的相邻的两个元素，counter计数器
while True:
if (counter > n-1):    # 当循环到指定次数之后退出循环
break
yield a              # 函数会停止并返回a的值，并保存下来a,b,counter的值
a, b = b, a + b      # 更新a，b的值
counter += 1

f = fibonacci(10)            # f 是一个迭代器，由生成器返回生成
print(type(f))

while True:
try:
#print(next(f))
print (next(f), end=" ") # 依次访问f的内容
except StopIteration:    # 这个就是刚才那个迭代器遍历结束后还访问会出现的错误
break
------------------------------
<class 'generator'>
0 1 1 2 3 5 8 13 21 34```

# Copy

## Copy list

```a = [1,2,3,4]
b = a
print(a==b)
print(id(a),id(b))
#实际上并没有将列表赋值给新的参数b，只是他两个指向同一个地址
#切片复制
a = [1,2,3,4,5]
b = a[:]
print(id(a),id(b))
-----------------------
True
2435637701448 2435637701448
2435637701512 2435635979528```

## Copy.copy

```import copy
#浅拷贝
a = [1,2,3,4,5]
b = copy.copy(a)
print(id(b),id(a))

a = [[1,2,3],[4,5,6],[7,8,9]]
b = copy.copy(a[1])
a[0][0] = 100
print(a,b)
a[1][0] = 100
print(a,b)
print(id(a[1]),id(b))
--------------------------------
[[100, 2, 3], [4, 5, 6], [7, 8, 9]] [4, 5, 6]
[[100, 2, 3], [100, 5, 6], [7, 8, 9]] [4, 5, 6]
3000896580296 3000896580360```
```#深拷贝
a = [[[1,2,3],2,3], [4,5,6]]
b = copy.deepcopy(a)
print(a,b)
print(id(a),id(b))
------------------------------
[[[1, 2, 3], 2, 3], [4, 5, 6]] [[[1, 2, 3], 2, 3], [4, 5, 6]]
2297174288648 2297174288904```

# Assert

```#断言
# 添加参数
'''

'''
assert len([1,2,3])<3, "列表长度不大于3"
---------------
Traceback (most recent call last):
File "f:\C-and-Python-Algorithn\python\practice.py", line 119, in <module>
assert len([1,2,3])<3, "列表长度不大于3"
AssertionError: 列表长度不大于3```

# Zip

```a = [1,2,3]
b = [11,22,33]
c = zip(a, b) # 返回的是一个迭代器，不能下标访问
for i in c:
print(i)
for i, j in zip(a, b): # zip经常这样使用
print(i, j)

a = [1,2,3,4,5]
b = [11,22,33] # 长度不一样
c = [x for x in zip(a, b)] # 以最短的那个列表为返回值长度
print(c)

a = [1,2,3]
b = [11,22,33]
c = [111,222,333]
d = [x for x in zip(a,b,c)] # 多列表也可以压包
print(d)
------------------
(1, 11)
(2, 22)
(3, 33)
1 11
2 22
3 33

[(1, 11), (2, 22), (3, 33)]

[(1, 11, 111), (2, 22, 222), (3, 33, 333)]```
```#解包
a = (1,2,3)
b = [11,22,33]
c = {'a':1, 'b':2, 'c':3}
print(*a)
print(a)
print(*b)
print(b)
print(*c) # 对于字典只是解压它的key
print(c)
# **双星号用来解压字典
print("{b} {c} {a}".format(**c))
# 直接print(**c)时会报错的

li = [1,2,3,4,5]
x, *y, z, p = li
print(x, y, z, p)
------------------
1 2 3

(1, 2, 3)

11 22 33

[11, 22, 33]

a b c

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

2 3 1

1 [2, 3] 4 5```

args和 *kwargs是常用的两个参数

*args：用于接受多余的未命名的参数，元组类型。

**kwargs：用于接受形参的命名参数，字典类型的数据。

0 条评论

• ### Python command

(1) 临时使用： 可以在使用pip的时候，加上参数-i和镜像地址(如https://pypi.tuna.tsinghua.edu.cn/simple)。 例...

• ### Python_Operation on Excel

I recently solve the problem of Excel ‘ data , it is hard to process Excel data ...

• ### 周练19.11.03/10

它表示一个迷宫，其中的1表示墙壁，0表示可以走的路，只能横着走或竖着走，不能斜着走，要求编程序找出从左上角到右下角的最短路线。

• ### 【Python】Python知识点总结

字典{key:value,key:value}，dict(key=value,key=value)：

• ### 聊聊 print 的前世今生

上周，我翻译了一篇文章，解释了为什么 Python 3 把 print 改为函数？ 概括有如下几点原因：1、print 不适宜作为应用程序级的语句。2、改为一个...

• ### Python3快速入门（二）——Pyth

默认情况下，Python 源码文件以 UTF-8 编码，所有字符串都是 unicode 字符串，可以为Python源码文件指定不同的编码，如下： # -*- c...

• ### Python3基础

默认情况下，Python 源码文件以 UTF-8 编码，所有字符串都是 unicode 字符串，可以为Python源码文件指定不同的编码，如下： # -*- ...

• ### 【Python基础】整数与浮点数

Python中，我们除了要跟代码打交道外，还要处理很多的数字，用来做可视化、记录用户信息等等。所以Python会根据数字的用法，以不同的方式处理他们，常见的类型...

• ### 30 个 Python 代码小片段

阅读别人的代码也是提高编程能力的一个有效方式。以下是整理的一些“常用”代码片段，分享给大家。

• ### 4.1-4.4 python的数据类型

print('hello {0}').format(name)       #执行效率是最高的