簡體   English   中英

用空格分割一串整數而不轉換為python中的列表

[英]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、 chainrepeatislice都是惰性求值的,所以這使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM