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

How to strip white spaces in Python without using a string method?

我对编程还很陌生,一直在通过 HackerRank 学习一些资料。但是,我目前遇到了这个 objective 或挑战。我已经尝试了几件事,但仍然无法弄清楚我到底做错了什么。

Objective:读取N并输出0到N之间的数字不带空格或使用字符串方式

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

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

输出:

1 2 3

不使用任何字符串方法,仅使用整数除法和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运算符只是将所有数字与空分隔符连接起来。

您可以将 print()sep 参数用于 "bind" 列表理解中的每个数字:

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

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

N = int(input())
answer = ''
for i in range(1, N + 1):
    answer += str(i)
print(answer)

这是我能想到的最接近 'not using any string methods' 的方法,尽管从技术上讲它是在后台使用 str.__new__/__init__/__add__ 或其他等效方法。我当然认为它比使用 ''.join.

更符合问题的要求

完成此操作的一种方法是将数字附加到空白字符串。

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

你必须做一个简单的数学运算才能做到这一点。他们期望做的是将每个列表元素乘以 10 的幂并将它们相加。例如,假设您有一个数组; 一 = [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

大功告成!

您可以在循环内打印数字。只需在 print:

中使用 end 关键字
print(i, end="")