四时宝库

程序员的知识宝库

在 Python 中使用嵌套推导式发挥创意,构建令人难以置信的应用程序

看一个嵌套循环的例子。在处理算法时,必须使用两个占位符迭代序列是很常见的。第一个版本从左到右贯穿整个序列。第二个 1 个也是如此,但它从第一个 1 开始,而不是 0。这个概念是测试所有对而不重复。让我们看看经典的 for 循环等效项:

# pairs.for.loop.py
items = 'ABCD'
pairs = []
for a in range(len(items)):
  for b in range(a, len(items)):
     pairs.append((items[a], items[b]))

输出:

$ python pairs.for.loop.py
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'B'), ('B', 
'C'), ('B', 'D'), ('C', 'C'), ('C', 'D'), ('D', 'D')

所有具有相同字母的元组都是 b 与 a 位于同一位置的元组。现在,让我们看看如何将其转换为列表推导式:

# pairs.list.comprehension.py
items = 'ABCD'
pairs = [(items[a], items[b])
for a in range(len(items)) for b in range(a, len(items))]

这个版本只有两行长,达到了相同的结果。请注意,在这种特殊情况下,由于 b 上的 for 循环依赖于 a,因此在推导式中,它必须遵循 a 上的 for 循环。如果交换它们,会出现错误。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接