Skip to main content
 首页 » 编程设计

Python之这两行是做什么的

2025年05月04日17bhlsheji

作为 Python 的新手,我花了很长时间弄清楚这两行代码的作用:

for i in [j for j in xrange(0, N) if [k for k in xrange(j) if now[k] == now[j]] == []]: 
   for j in [k for k in xrange(1, K + 1) if [l for l in xrange(i) if now[l] == k] == []]: 

有没有办法重写这个让像我这样的菜鸟也能理解?谢谢。

请您参考如下方法:

呃。阅读那是 body 上的痛苦。这是一个很好的例子,说明如何不使用列表理解。

这是一个不使用列表理解的严格重写:

for i in xrange(0, N): 
    implicit_list_1 = [] 
    for k in xrange(i): 
        if now[k] == now[i]: 
            implicit_list_1.append(i) 
    if implicit_list_1 == []: 
        for j in xrange(1, K + 1): 
            implicit_list_2 = [] 
            for l in xrange(i): 
                if now[l] == j: 
                    implicit_list_2.append(l) 
            if implicit_list_2 == []: 

这里有一个更惯用的重写:

for i in xrange(N): 
    if now[i] not in now[:i]: 
        for j in xrange(1, K + 1): 
            if j not in now[:i]: 

这是假设 K 是一个单独的变量,而不是输入错误的 k。

此外,那些单字母变量名的风格很差。最好使用实际反射(reflect)变量用途的变量名。