[英]Splitting a string of integers with spaces without converting to a list in python
基本上,我需要一個代碼,它接受一個整數,然后打印出具有特定范圍的數字字符串。
例如:
n = 11
1 2 2 3 3 3 4 4 4 4
n = 7
1 2 2 3 3 3 4
a = []
n = int(input())
if n == 0:
print(n)
for i in range(int(n) + 1):
a += [i] * i
a = ' '.join(map(str, a))
print(a[:n])
這可以完成工作,但它將空格計為字符,因此我嘗試將其轉換為 int
n = int(n)
print(' '.join(a[:n]))
但是當 n >= 47 時,它開始將 10 打印為 1 0,這是不正確的
我也試過這個代碼
n = int(input())
for i in range(n):
b = (str(i) * i)
print(b, end = ' ')
但我不明白如何用空格分隔 b而不將字符串轉換為列表並將其打印在一行中。 我不確定這是否可能。
也許是這樣的?
# initialize variables:
number = 11
counter = 0
for i in range(number):
for j in range(i):
# print number:
print('%d ' %i, end='')
# increment counter (tracks how many numbres to print):
counter += 1
# exit inner loop if counter reaches number:
if counter >= number-1: break
# exit outer loop if counter reaches number:
if counter >= number-1: break
輸出:
1 2 2 3 3 3 4 4 4 4
這是使用itertools
的解決方案。 Generators、 chain
、 repeat
和islice
都是惰性求值的,所以這使用 O(1) 空間。
>>> n = 7
>>> from itertools import chain, repeat, islice
>>> gen = chain.from_iterable(repeat(i, i) for i in range(1, n+1))
>>> for i in islice(gen, n):
... print(i, end=' ')
...
1 2 2 3 3 3 4
這看起來很簡單。 但這真的能解決問題嗎?
>>> for i in t:
... if i!=" ": print i
...
1
2
2
3
3
3
4
4
4
4
甚至字符串替換,
print t.replace(" ","\n")
1
2
2
3
3
3
4
4
4
4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.