python - 嵌套 for 循环以列出具有不同 "if"条件的理解

标签 python python-3.x list-comprehension nested-loops

我正在尝试将此嵌套循环转换为列表推导式,但我不确定是否可行,因为“tmp”列表中的项目可能有不同的值。这是最好的方法吗?谢谢!

final = []
for a in range(-13, 1):
    for b in range(0,4):
        for c in range(6, 49):
            for d in range(48, 94):
                tmp = [0 for i in range(100)]
                for i in range(100):
                    if raw_x[i] >= b and raw_y[i] >= d:
                        tmp [i] = -1
                    if raw_x[i] <= a and raw_y[i] <= c:
                        tmp [i] = 1
                final.append(tmp)

最佳答案

嵌套推导的可读性不是很好

一个简单的

[something for something in container if something > 9]

很棒,但嵌套的常常令人困惑

你可以简单地将循环移动到一个生成器函数中——它仍然是可读的并且允许惰性迭代

def no_idea_what_this_represents():
    for a in range(-13, 1):
        for b in range(0,4):
            for c in range(6, 49):
                for d in range(48, 94):
                    tmp = [0 for i in range(100)]
                    for i in range(100):
                        if raw_x[i] >= b and raw_y[i] >= d:
                            tmp [i] = -1
                        if raw_x[i] <= a and raw_y[i] <= c:
                            tmp [i] = 1
                    yield tmp

final = [signs for signs in no_idea_what_this_represents()]

编辑:只是一个自以为是的附录——这样就可以命名复杂的嵌套循环(出于显而易见的原因,我将其命名为 no_idea_what_this_represents)但是当程序员看到

possible_views = [matrix for matrix in camera_matrices()]

他马上就知道这是什么意思了

possible_views = [device.matrix 
                  for devices in itertools.chain(connected_devices(), buffered_devices()
                  for device in devices
                  if device.type=='camera']

让程序员读了很多行并且不清楚发生了什么

关于python - 嵌套 for 循环以列出具有不同 "if"条件的理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54076739/

相关文章:

python - 我们如何强制为魔术方法(特殊方法)调用 getattribute() ?

python - 创建非常大的二维数组而不会对 Python 中的代码运行时间产生重大影响

python - 如何在一行中编写一个for循环和多个if语句?

python - 关于变量范围的正确性

另一种方式的python FSM Fysom回调

python - 聚类分析的适用性

python - 在 Python 类中实现克隆方法的正确惯用方法?

python - PyQt5 线程 GUI 不工作

python - pyth 错误 [rtf 到 xml/html]

c# - 如何在 C# 中进行列表理解(将列表转换为另一个列表的紧凑方式)?