标签:简写 value 不可 str iterable 大量 可读性 href iter
目录
标签(空格分隔): Python-解析式
生成一个列表, 元素 0~9,最每一个元素自增 1后,求平方,返回列表
# 普通实现
lst = []
for i in range(10):
lst.append((i+1)**2)
# 列表解析式实现
lst = [(i+1)**2 for i in range(10)]
[返回值 for 元素 in 可迭代对象 if 条件]
for
循环 , if 条件语句可选
[expr for i in iterable1 for j in iterable2]
lst = []
for i in itersble1:
for j in iterable2:
lst.append((x, y))
[expr for i in iterable1 if cond1 if cond2]
lst = []
for i in itersble1:
if cond1:
if cond2:
lst.append(i)
>>> 等价于
for i in iterable1:
if cond1 and cond2:
lst.append(i)
返回 1-10 平方的列表
print([i**2 for i in range(1, 11)])
有一个列表 lst = [1, 4, 9, 16, 2, 5, 10, 15],生成一个新列表,要求新元素是lst相邻2项的和
lst = [1, 4, 9, 16, 2, 5, 10, 15] length = len(lst) print([lst[i]+lst[i+1] for i in range(length-1)])
打印 九九乘法表
[print("{}x{}={:>{}}{}".format(j, i, i*j, 1 if j == 1 else 2, "\n" if i==j else ‘ ‘), end="") for i in range(1, 10) for j in range(1, i+1)]
打印ID, 要求左边4位是从1开始的整数,右边是10位随机小写英文字母,中间以点分隔; 打印前100个
import string from random import choice [print(".".join(["{:0>4}".format(i), "".join(choice(string.ascii_lowercase) for _ in range(10))])) for i in range(100)]
{返回值 for 元素 in 可迭代对象 if 条件}
{(x, x+1) for x in range(10)}
{for x in range(10)}
# 错误用法,集合的元素必须是可哈希的{返回值 for 元素 in 可迭代对象 if 条件}
key:value
形式{x: (x, x+1) for x in range(10)}
{x: [x, x+1] for x in range(10)}
{(x,): [x, x+1] for x in range(10)}
{[x]: [x, x+1] for x in range(10)}
# 错误用法,不可哈希{chr(0x41+x): x**2 for x in range(10)}
{str(x): y for i in range(3) for y in range(4)}
(返回 for 元素 in 可迭代对象 if 对象)
使用 内建函数
next()
来判断一个对象是不是生成器
使用 内建函数iter()
将一个对象编程一个生成器对象
# 生成器表达式使用
g = ("{:04}".format(i) for i in range(1, 11))
next(g)
for i in g:
print(i)
print("~~~~~~~~~~~")
for i in g:
print(i)
# 总结
# - 延迟计算
# - 返回一个迭代器,可以迭代
# - 从前到后走完一遍后,不能回头
# 列表生成器
g = ["{:04}".format(i) for i in range(1, 11)]
next(g)
for i in g:
print(i)
print("~~~~~~~~~~~")
for i in g:
print(i)
# 总结
# - 立即计算
# - 返回的不是一个迭代器,而是一个可以迭代对象列表
# - 从前到后走完一遍后,可以重新回头迭代
1、一般来说,应该多用解析式,因为解析式简短、高效 (解释器会做优化)
2、如果一个解析式非常复杂,难以读懂,要考虑拆解成 for 循环
生成器和迭代器是不同的对象,但都是可迭代对象
标签:简写 value 不可 str iterable 大量 可读性 href iter
原文地址:https://www.cnblogs.com/jingru-QAQ/p/11415760.html