Python中复杂条件的列表解析

j8ag8udp  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(173)

我一直在寻找使循环更快的方法,然后我发现了列表解析。
我自己试过了,但我还不完全明白。
从我对列表解析的研究中,我想执行的代码在左边,后面是条件,然后是for循环。
基本上是这样的。

["Something I'd like to execute" Some conditions for loop]
Following this style, I did it like this.

我试图将代码转换为一行代码:

graph = []

for g in range(M):
    satisfy = []
    graph_count = 0
    for i in range(N-1):
        count = 0
        for j in range(N):
            if i < j and count < 1:
                if graph_count < g:
                    count += 1
                    graph_count += 1
                    satisfy.append("1")
                else:
                    satisfy.append("0")
            elif i < j:
                satisfy.append("0")
    graph.append("".join(map(str,satisfy)))

我的尝试

graph = [[count+=1,graph_count+=1,satisfy.append("1") if graph_count < g else satisfy.append("0") and if i<j and count<1 else satisfy.append("0") if i<j for j in range(N) count=0 for i in range(N-1)] graph_count=0, "".join(map(str,satisfy)) for g in range(M)]

我做错了什么?

yizd12fk

yizd12fk1#

优化有两种:

  • 微优化(语句级,例如f字符串比format函数快)
  • 宏优化(算法、使用的数据结构等)

优化算法可能比在微优化上花费同样的精力获得更高的回报。
下面是我对您的问题的解决方案。在分析了预期输出之后,我发现了一些模式,并减少了循环和分配的数量:

from itertools import accumulate

graph = []
size = N * (N - 1) // 2
s = list(reversed(list(accumulate(range(N)))))
for g in range(M):
    satisfy = ["0"] * size
    for i in range(N - 1):
        if g > i:
            satisfy[size - s[i]] = "1"

    graph.append("".join(satisfy))

相关问题