打印列表时换行后保持 Python 间距
Keeping Python from spacing after breaking a line when printing a List
(是的,我四处寻找解决方案,即使我找到了,也无法解决我的问题。我是 Python 的新手,抱歉! )
我有工作要做,它对我说:
"User will input X and Y. Show a sequence from 1 to Y, with only X elements each line."
例如
2 4 作为入口
1 2
3 4
例如 2 6
1 2
3 4
5 6
好吧...所以,我想这样做:
line, final = input().split()
line = int(line)
final = int(final)
List = []
i = 0
total = (final // line)
spot = 0
correction = 0
k = 1
if i != final:
List = list(range(1, final + 1, 1))
i += 1
while k != total:
spot = line * k + correction
correction += 1
k += 1
list.insert(List, spot, '\n')
print(*List)
好的。所以我设法构建了从 1 到 "final" var 的列表。
还设法找到我的新行将在哪些位置(因此,var "spot")创建。 (不得不使用校正变量和一些数学来达到它,但它是 10/10)
到目前为止,还不错。
唯一的问题是这项工作应该在 URI Online Judge 上交付,它要求我的结果显示如下:
2 10作为入口
1 2
3 4
5 6
7 8
9 10
并且,使用我刚刚发布的代码,我得到了这个结果:
1 2
3 4
5 6
7 8
9 10
因此,它说我的代码是错误的。我已尽一切努力删除这些空格(我认为)。使用 sys 将不起作用,因为它只打印一个参数。尝试使用 join(但我可能做错了,因为我是新手)
好吧,我几乎什么都试过了。希望有人能帮助我。
提前致谢:)
我将用户输入分成两个字符串,如果 y 比 x 大 2,则将它们转换为 int 和 comapre,因为这是绘制序列的最小值
然后我列出从 1 到 y
并为每次迭代打印它们迭代 2 个元素
x,y=input().split()
if int(y)>int(x)+2:
s=range(1,int(y)+1)
for i in range(0,len(s),2):
print(' '.join(str(d) for d in s[i:i+2]))
结果:
1 2
3 4
5 6
7 8
9 10
使用 itertools 从块中获取可迭代对象:
>>> import itertools
>>> def print_stuff(x,y):
... it = iter(range(1, y + 1))
... chunk = list(itertools.islice(it,X))
... while chunk:
... print(*chunk)
... chunk = list(itertools.islice(it,X))
...
>>> print_stuff(2,4)
1 2
3 4
>>>
这里:
>>> print_stuff(2,10)
1 2
3 4
5 6
7 8
9 10
>>>
您已经构建了一个包含每个必要字符(包括换行符)的列表。因此,您有一个这样的列表:
[1, 2, '\n', 3, 4, '\n'...]
当您将参数解压缩到 print()
时,它会在每个参数之间放置一个分隔符,默认为 space。所以,它打印 1
,然后是 space,然后是 2
,然后是 space,然后是换行符,然后是 space... 那就是为什么你在每一行的开头都有一个 space。
不是在列表中插入换行符,而是将该列表与 iter
和 next
:
分块
>>> def chunks(x, y):
... i = iter(range(1, y+1))
... for row in range(y//x):
... print(*(next(i) for _ in range(x)))
... t = tuple(i)
... if t:
... print(*t)
...
>>> chunks(2, 6)
1 2
3 4
5 6
>>> chunks(2, 7)
1 2
3 4
5 6
7
您使用的方法的问题是在系列中每个 "\n"
字符后打印 space 的结果。虽然这个想法很聪明,但不幸的是,我认为这意味着您将不得不采用不同的方法将换行符插入列表。
试试这个方法:(已编辑)
x, y = input().split()
x, y = int(x), int(y)
for i in range(1, y+1):
if i % x == 0 or i == y:
print(i)
else:
print(i, end=" ")
3 11
的输出
1 2 3
4 5 6
7 8 9
10 11
2 10
的输出
1 2
3 4
5 6
7 8
9 10
(是的,我四处寻找解决方案,即使我找到了,也无法解决我的问题。我是 Python 的新手,抱歉! )
我有工作要做,它对我说: "User will input X and Y. Show a sequence from 1 to Y, with only X elements each line."
例如 2 4 作为入口
1 2
3 4
例如 2 6
1 2
3 4
5 6
好吧...所以,我想这样做:
line, final = input().split()
line = int(line)
final = int(final)
List = []
i = 0
total = (final // line)
spot = 0
correction = 0
k = 1
if i != final:
List = list(range(1, final + 1, 1))
i += 1
while k != total:
spot = line * k + correction
correction += 1
k += 1
list.insert(List, spot, '\n')
print(*List)
好的。所以我设法构建了从 1 到 "final" var 的列表。 还设法找到我的新行将在哪些位置(因此,var "spot")创建。 (不得不使用校正变量和一些数学来达到它,但它是 10/10)
到目前为止,还不错。 唯一的问题是这项工作应该在 URI Online Judge 上交付,它要求我的结果显示如下:
2 10作为入口
1 2
3 4
5 6
7 8
9 10
并且,使用我刚刚发布的代码,我得到了这个结果:
1 2
3 4
5 6
7 8
9 10
因此,它说我的代码是错误的。我已尽一切努力删除这些空格(我认为)。使用 sys 将不起作用,因为它只打印一个参数。尝试使用 join(但我可能做错了,因为我是新手)
好吧,我几乎什么都试过了。希望有人能帮助我。
提前致谢:)
我将用户输入分成两个字符串,如果 y 比 x 大 2,则将它们转换为 int 和 comapre,因为这是绘制序列的最小值 然后我列出从 1 到 y 并为每次迭代打印它们迭代 2 个元素
x,y=input().split()
if int(y)>int(x)+2:
s=range(1,int(y)+1)
for i in range(0,len(s),2):
print(' '.join(str(d) for d in s[i:i+2]))
结果:
1 2
3 4
5 6
7 8
9 10
使用 itertools 从块中获取可迭代对象:
>>> import itertools
>>> def print_stuff(x,y):
... it = iter(range(1, y + 1))
... chunk = list(itertools.islice(it,X))
... while chunk:
... print(*chunk)
... chunk = list(itertools.islice(it,X))
...
>>> print_stuff(2,4)
1 2
3 4
>>>
这里:
>>> print_stuff(2,10)
1 2
3 4
5 6
7 8
9 10
>>>
您已经构建了一个包含每个必要字符(包括换行符)的列表。因此,您有一个这样的列表:
[1, 2, '\n', 3, 4, '\n'...]
当您将参数解压缩到 print()
时,它会在每个参数之间放置一个分隔符,默认为 space。所以,它打印 1
,然后是 space,然后是 2
,然后是 space,然后是换行符,然后是 space... 那就是为什么你在每一行的开头都有一个 space。
不是在列表中插入换行符,而是将该列表与 iter
和 next
:
>>> def chunks(x, y):
... i = iter(range(1, y+1))
... for row in range(y//x):
... print(*(next(i) for _ in range(x)))
... t = tuple(i)
... if t:
... print(*t)
...
>>> chunks(2, 6)
1 2
3 4
5 6
>>> chunks(2, 7)
1 2
3 4
5 6
7
您使用的方法的问题是在系列中每个 "\n"
字符后打印 space 的结果。虽然这个想法很聪明,但不幸的是,我认为这意味着您将不得不采用不同的方法将换行符插入列表。
试试这个方法:(已编辑)
x, y = input().split()
x, y = int(x), int(y)
for i in range(1, y+1):
if i % x == 0 or i == y:
print(i)
else:
print(i, end=" ")
3 11
1 2 3
4 5 6
7 8 9
10 11
2 10
1 2
3 4
5 6
7 8
9 10