Python避免使用for循环或需要缩短代码库

dud*_*udd 0 python django python-3.x

我已经编写了python代码,并且其中有太多的for循环,因此,我的代码可读性太低,而pylint star太低。

我正在寻找一种方法来用更少的代码来解决相同的问题。

在这里,您可以浏览我的摘录:

numberlist = [1,3,5]
stringlist = ['a', 'b', 'c']
id = '458'

numbered_string = []
for n, s in numberlist, stringlist:
    num_str = "{}{}".format(
                n,
                s,
                id,
            )
    numbered_string.append(num_str)

codes = []
for n,s, sn in numberlist, stringlist, numbered_string:
    code = make_code(
        n,
        s,
        sn
    )
    codes.append(code)

print(codes)
Run Code Online (Sandbox Code Playgroud)

忽略函数make_code(),或假设make_code()

def make_code(n,s, sn):
    return str(n) + str(s) + str(sn)
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我缩短代码段吗?请忽略此功能。我想更好地改进此代码并提高可读性,太多实例不是解决方案。

And*_*rew 6

看一下列表理解。因此,代替:

codes = []
for n, s, sn in zip(numberlist, stringlist, numbered_string):
    code = make_code(
        n,
        s,
        sn
    )
    codes.append(code)
Run Code Online (Sandbox Code Playgroud)

你可以写:

codes = [make_code(n, x, sn) for n, x, sn in zip(numberlist, stringlist, numbered_string)]
Run Code Online (Sandbox Code Playgroud)

请注意,我zip(numberlist, stringlist, numbered_string)for声明中使用了而不是裸露的numberlist, stringlist, numbered_string。至少对我来说,在python 3.6上,后者不起作用。

列表推导(以及集合,字典,生成器等的相对关系)非常有用,并且具有很多功能,例如在if子句后使用子句进行过滤for以及支持嵌套循环。

如果您的目标是提高代码的可读性,则可能还需要确保间距是一致的(例如n, s, sn而不是n,s, sn),并且变量的命名是一致的-通常,在python中,变量和函数应该用snake_case(例如number_list代替numberlist)。