python语法记录|

map()函数

A = [1, -3, 5]
A_abs = list(map(abs, A))

map(func, A),把func函数作用到A的每个元素上,返回的是惰性迭代器,依次产出1,3,5,不能直接打印或索引;用list()把它一次性拉出来,变成普通列表[1, 3, 5]。
迭代器和可迭代对象
只要看到“数据可能很大”或者“只想遍历一次”,优先用迭代器;需要随机访问、长度、多次复用,再转成列表。
Iterable | 可迭代对象:列表、元组、字符串、字典、集合... for x in 可迭代对象,能被 iter() 变成迭代器
Iterator | 迭代器:支持 next(),for x in 迭代器相当于反复调用 next(),例如enumerate,zip/filter,文件对象,reversed/sorted...

点击查看代码
#可迭代对象
lst  = [10, 20, 30]
it   = iter(lst)          # 变成迭代器
next(it)                  # 10

for k in {'a':1, 'b':2}:   # 默认遍历键
    print(k)               # a b

#迭代器
for i in range(10**8):     # 不会真的建 1 亿个整数
    if i > 5: break

for idx, val in enumerate(['a', 'b', 'c'], start=1):
    print(idx, val)        # 1 a  2 b  3 c

name = ['tom', 'jerry']
age  = [18, 17]
for n, a in zip(name, age):
    print(n, a)            # tom 18  jerry 17

m = map(abs, [-1, -2, 3])  # 迭代器
list(m)                    # [1, 2, 3]

f = filter(str.isdigit, ['1', 'a', '2'])
list(f)                    # ['1', '2']

with open('big.log') as f:  # 一次只读一行
    for line in f:
        if 'ERROR' in line:
            print(line.rstrip())

for ch in reversed('abc'):  # 不产生新字符串
    print(ch)                 # c b a

squares = (x*x for x in range(5))  # 生成器
next(squares)                        # 0
sum(squares)                         # 30 (1+4+9+16)

d = {'a': 1, 'b': 2}
for k in d:               # 默认按键
    print(k)
for v in d.values():      # 值迭代器
    print(v)
for kv in d.items():      # 键值对迭代器
    print(kv)             # ('a', 1) ...

列表推导和生成器表达式区别,一个[]一个()
点击查看代码
data = range(5)
list_comp = [x*x for x in data]     # 列表推导 → 真·list
gen_exp   = (x*x for x in data)     # 生成器表达式 → 生成器对象

**heapq最小堆**
posted @ 2025-10-05 20:29  Y荷兰豆Y  阅读(5)  评论(0)    收藏  举报