Python - 这两行是做什么的?

标签 python

作为 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)变量用途的变量名。

关于Python - 这两行是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595861/

相关文章:

python-docx: 'package not found'

python - SQL查询并不总是插入缺失值

python - 比较两个 numpy 数组是否符合两个条件

python - 从 Odoo 8 中的另一个模型调用方法

python - 从 PID 设置事件/前景窗口

python - 为什么数据库行元组中的整数有 'L' 后缀?

python - 如何在python中支持两种类型的函数参数

python - matplotlib imshow() 使用 3xN RGB 数组

python - Django (1.2) 表单 : ManyToManyField Help Text

python - 在不同的列上连接数据帧