如何使用python中的列表理解在两个循环之间打印行,以创建金字塔

问题描述

我想实现这个 输出

PUBLIC dbContext:DbContext
{
   PRIVATE int tenantId;
   public dbContext(DbContextOptions<dbContext> options): base(options) { 
        //securityHelper IS EXTERNAL LIBRARY
        this.tenantId = securityHelper.GetClaim<INT>("tenantId");
   }
   protected override void OnModelCreating(ModelBuilder modelBuilder)
   {
      modelBuilder.Entity<AccountsTransactions>().HasQueryFilter(p=>p._tenantId == this.tenantId);
   }

Whis 是用普通的 for 循环完成的

1
12
123
1234
12345

我如何对列表理解做同样的事情?我应该如何在列表理解中打印空行。

我已经走到这一步了:

for i in range(1,7):
    for j in range(1,i):
        print(j,end='')
    print(' ')

输出

[ print(j,end='')  for i in range(1,7)  for j in range(1,i)  ]

解决方法

您可以使用 str.join() 以所需格式创建字符串:

print(*[''.join(str(j) for j in range(1,i)) for i in range(1,7)],sep="\n")

# without "sep" in older versions of Python:
# print('\n'.join(''.join(str(j) for j in range(1,7)))

将打印:

1
12
123
1234
12345
,

打印\n而不是打印一个空格。这是换行符的转义符。

,

这里有一些方法,从简单到更高级......

作为向累积变量添加数字的简单循环:

n = 0
for i in range(1,6):
    n = n*10 + i
    print(n)

使用子范围直到行号:

for n in range(1,6):
    print(*range(1,n+1),sep="")

使用来自 itertools 模块的累积:

from itertools import accumulate
for line in accumulate(range(1,6),lambda a,b:a*10+b):
    print(line)

作为递归函数:

def incDigit(N): return 1 if N==1 else incDigit(N-1)*10+N

for n in range(1,6): print(incDigit(n))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...