python打印列表项在行上递增

时间:2015-03-02 16:39:37

标签: python list lines

我正在尝试获取用户输入并以盒格式打印出数字列表到python中的不同行。

现在我有:

horizontalsize =  int (input ('please enter horizontal size '))

verticalsize = int (input ('please enter vertical size '))

numbers = horizontalsize * verticalsize

mylist = []

mylist.append(range(1,numbers))

for i in range(1,numbers,horizontalsize):

    print (i)

用户将输入高度和宽度,如果高度输入为5且宽度输入为3,则应打印:

1 2 3

4 5 6

7 8 9

10 11 12

13 14 15

现在我正在接受:

1

4

7

10

13

如何填写其余数字? 非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

这应该有效:

for i in range(1, numbers, horizontalsize):
    lst = range(i, i+horizontalsize)
    print lst  # format is [1,2,3]
    print ' '.join(map(str,lst))  # format is "1 2 3"

您还可以按列表推导声明2D列表,例如:

>>> horizontalsize = 3
>>> numbers = 15
>>> ll = [[x for x in range(y,y+horizontalsize)] 
for y in range(1,numbers,horizontalsize)]
>>> ll
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]
>>> for line in ll:
...    print ' '.join(map(str,line))
... 
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15

答案 1 :(得分:0)

您使用的range()将从1开始,最多numbers,每次增加horizontalsize。您直接从该范围中提取i的值,因此这些值是您获得的唯一值。一个简单的解决方案是添加第二个嵌套循环以生成缺失值(ii+horizontalsize之间)。

for i in range(1,numbers,horizontalsize):
    for j in range(i, i+horizontalsize):
        print (j, end=" ")
    print() #for the newline after every row

答案 2 :(得分:0)

您的循环步骤会跳过1到1 + horizo​​ntalsize之间的所有数字,您只需打印该数字(无需担心将内容放在换行符上)。你需要插入一个嵌套的for循环,或者修改你的范围来覆盖每个数字,然后只在特定的那个之后放置换行符。

第二个解决方案,它使用模运算符:

for i in range(1,(numbers+1)):
    print(i,end=" ")
    if i % horizontalsize == 0:
        print()

这给了我:
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15