如何在不使用字符串方法的情况下在Python中去除空格?

时间:2016-11-11 17:55:40

标签: python removing-whitespace

我对编程很新,并且通过HackerRank学习了一些材料。但是,我目前仍然坚持这一目标或挑战。我尝试了几件事,但仍然无法弄清楚我到底做错了什么。

目标:读取N并输出0到N 之间的数字,不带任何空格或使用字符串方法。

N = int(input())
listofnum = []

for i in range(1, N +1):
    listofnum.append(i)
print (*(listofnum))

输出:

1 2 3

7 个答案:

答案 0 :(得分:2)

不使用任何字符串方法,只使用整数除法和list来反转数字,使用sys.stdout.write打印它们:

import sys
N = int(input())

for i in range(1,N+1):
    l=[]
    while(i):
        l.append(i%10)
        i //= 10
    for c in reversed(l):
        sys.stdout.write(chr(c+48))

或者像tdelaney建议的那样,一种更加硬编码的方法:

import os,sys,struct

N = int(input())

for i in range(1,N+1):
    l=[]
    while(i):
        l.append(i%10)
        i //= 10
    for c in reversed(l):
        os.write(sys.stdout.fileno(), struct.pack('b', c+48))

所有这一切都非常有趣,但最好的方法是使用str.join()str构造,使用生成器理解来实现这一点:

"".join(str(x) for x in range(1,N+1))

每个数字都转换为字符串,join运算符只是用空分隔符连接所有数字。

答案 1 :(得分:2)

float

这是我能想到的最接近的“不使用任何字符串方法”,虽然从技术上来说它在背景中使用N = int(input()) answer = '' for i in range(1, N + 1): answer += str(i) print(answer) 或某些等价物。我当然认为它比使用str.__new__/__init__/__add__更符合问题的要求。

答案 2 :(得分:1)

您可以在循环内打印数字。只需在end中使用print关键字:

print(i, end="")

答案 3 :(得分:0)

您可以使用print()' sep参数来"绑定"从列表理解中将每个数字组合在一起:

>>> print(*[el for el in range(0, int(input())+1)], sep="")
10
012345678910
>>>

答案 4 :(得分:0)

尝试' .join([str(i)for i in range(N)])

答案 5 :(得分:0)

实现此目的的一种方法是将数字附加到空白字符串。

out = ''
for i in range(N):
    out += str(i)
print(out)

答案 6 :(得分:0)

你必须做一个简单的数学运算。他们期望做的是将每个列表元素乘以10的幂,并将它们相互加起来。举个例子,让我们说你有一个阵列; a = [2,3,5] 你需要输出; 235

然后将每个循环元素从右向左乘以10 ^ 0,10 ^ 1和10 ^ 2。在创建字符串列表后,您可以使用此代码。

a = map(int,a)
for i in range(len(a)):
    sum += (10**i)*a[-i]
print sum

你完成了!