将嵌套循环转换为列表理解

converting nested loop to list comprehension

我正在编写一个程序,它定义了两个名为 Funct()Funct1() 的函数。两者都收到以下给定列表:

Name = [‘Sai’, ‘Rusheel’,’Vinay’]

Enroll_no. = [80,90,85]

Subject = [‘Maths’, ‘Computer’, ‘Science’]

这两个函数都应该通过从这些列表中挑选元素和 return 它们来组成一个句子。我在 dosp_1() 中使用 for 循环,在 disp_2() 中使用列表理解。

输出示例:

Sai has enrolment No. 80 and he studies Maths.

我正在使用下面的常规代码和 for 循环:

def Funct(Name,Enroll_No,Subject):
    for i in Name:
        for j in Enroll_No:
            for k in Subject:
                print("{} has enrolment No. {} and he studied {}".format(i,j,k))
Funct(Name,Enroll_No,Subject)

现在,我如何使用列表推导来获取它?

按照您当前的操作方式,您将打印姓名、注册和主题的每个可能组合。您可能只想打印 corresponding 组合。内置的 zip() 函数将为您执行此操作:

# as a for loop
for i, j, k in zip(Name, Enroll_No, Subject):
    print("{} has enrolment No. {} and he studied {}".format(i, j, k))

# using a comprehension
print("\n".join([
    "{} has enrolment No. {} and he studied {}".format(i, j, k)
    for (i, j, k) in zip(Name, Enroll_No, Subject)
]))

# as a for loop without using zip(), for illustration
for n in range(len(Name)):
    print(
        "{} has enrolment No. {} and he studied {}"
        .format(Name[n], Enroll_No[n], Subject[n])
    )

(为便于阅读而添加了额外的换行符)

如果出于某种原因,你想实际打印每个可能的组合,你可以在理解中放置多个 for 子句。这应该会产生与您当前代码相同的输出,但可能不是您想要的:

print("\n".join([
    "{} has enrolment No. {} and he studied {}".format(i, j, k)
    for i in Name
    for j in Enroll_No
    for k in Subject
]))

*从技术上讲,在这种情况下可以删除 [] - 不带括号的理解生成 生成器 ,而带括号的理解生成 列表。对于 str.join(),两者将被同等对待。