文章目录
1. 背景
-
在Python中,向列表中添加元素通常使用
append()
方法。 -
集合添加元素需要使用
add()
方法,字典则通过Dict[key] = value
增加键值对。 -
此外,Python提供了推导式形式,用于向可变的复合数据类型中添加元素。
2. 列表推导式
-
列表推导式的基本形式为:
[表达式 for 元素 in 可迭代类型 [if 条件]]
-
例子:
[num for num in range(10) if num % 2 == 0] → [0, 2, 4, 6, 8]
-
支持多重循环,循环顺序从外到内。
[num for elem in ls for num in elem] → [1, 2, 3, 4, 5, 6, 7, 8, 9]
-
可以在一个元组中添加元素,元组位于可迭代容器中。
Dict = {"python":1, "C++":2, "java":3} highest = max(Dict.values()) lowest = min(Dict.values()) higher = [name for (name, score) in Dict.items() if score == highest] lower = [name for (name, score) in Dict.items() if score == lowest] print(higher) print(lower)
-
支持函数或复杂表达式,条件满足时添加元素。
[fun(n) for n in range(1,10)] → [1, 4, 3, 16, 5, 36, 7, 64, 9]
-
生成100以内的素数也是常见用途。
[num for num in range(2,100) if 0 not in [num % d for d in range(2, int(num**0.5)+1)]]
3. 迁移到字典与集合
-
字典:
{i: i%2 for i in range(10) if i % 2 == 0} → {0:0, 2:0, 4:0, 6:0, 8:0}
{i: i%2==0 for i in range(10) if i % 2 == 0} → {0:True, 2:True, 4:True, 6:True, 8:True}
{i: i%2!=0 for i in range(10) if i % 2 == 0} → {0:False, 2:False, 4:False, 6:False, 8:False}
-
多层循环展开时,顺序从外到内执行。
{i:j for i in range(10) for j in range(10)} → {0:9, 1:9, 2:9, 3:9, 4:9, 5:9, 6:9, 7:9, 8:9, 9:9}
-
集合:
{num for num in [1,1,1,2,3,4,2,2,3,4]} → {1,2,3,4}
-
元组和字符串不可变,不支持推导式。
-
(num for num in range(10)) 是一个生成器对象。
for i in (num for num in range(10)): print("%d" % i, end=" ")