将循环输出整数作为字符串加入?

Joining loop output integers as a string?

到目前为止,这是我的代码。它将数字作为字符串,并在需要时将它们拆分。然后将它们从八进制转换为十进制。 但是,在多个数字作为单个字符串出现的情况下;转换后,我需要将它们重新组合成一个字符串。他们到达的格式相同。

dataset = "120 156 206" #Just a testing sample
delimiter = " "
if delimiter in dataset:
    text = dataset.strip('"')
    text = text.split()
    for i in text:
        c = int(i, base=8)
        var1 = "".join(str(c))
        print(var1)
else:
    c = int(dataset, base=8)
    print(c)

预期输出应为:"80 110 134"

我试过:

d = " ".join(str(c))

输出:

8 0
1 1 0
1 3 4


d += " ".join(str(c))

输出:

1 3 48 0
1 3 48 01 1 0
1 3 48 01 1 01 3 4

还有各种其他似乎只会破坏一切的东西,类型错误等... 没有 .join 这是我到目前为止最接近的:

80
110
134

我会理解的。在空白处拆分数据,将元素转换为 intbase=8,将其转换回字符串,然后连接结果。您不需要检查分隔符,split() 会为您做这件事(如果没有分隔符,returns 一个只有一个元素的列表,所以您不需要关心它) .

" ".join(str(int(i, base=8)) for i in dataset.split())

这段代码给出了您需要的输出:

dataset = "120 156 206" #Just a testing sample
delimiter = " "
if delimiter in dataset:
    text = dataset.strip('"')
    text = text.split(delimiter)
    c = []
    for i in text:
        c.append(str(int(i, base=8)))
    var1 = " ".join(c)
    print(var1)
else:
    c = int(dataset, base=8)
    print(c)

问题是 print 以换行符结尾,这是您不想要的

  • 要么改end。请注意,您没有 "".join(str(c)),只需使用 c

    for i in text:
        c = int(i, base=8)
        print(c, end=" ")
    
  • 或者循环保存,一次性打印出来

    result = []
    for i in text:
        result.append(str(int(i, base=8)))
    print(" ".join(result))
    

请注意,您既不需要 strip 也不需要 if/else,并且可以将所有这些组合在一个列表理解中

dataset = "120"
result = [str(int(i, base=8)) for i in dataset.split()]
print(" ".join(result))

您不必关心是否使用定界符。 Python 会处理的。

考虑到这一点,哪里有一种冗长的方法可以做到这一点,即使您使用一个数字也可以。记下 singular/plural 个变量名称来指导您:

dataset = "120 156 206" #Just a testing sample
delimiter = " "

numbers_as_octal_string = dataset.split(delimiter)
numbers_as_decimal_string = []


for number_as_octal_string in numbers_as_octal_string:
    number_as_decimal = int(number_as_octal_string, 8)
    number_as_decimal_string = str(number_as_decimal)
    numbers_as_decimal_string.append(number_as_decimal_string)

print(delimiter.join(numbers_as_decimal_string))

这样做之后,Python 中有一个叫做 list comprehensions 的技巧,它们可以通过在一行中完成大量工作来使您的工作变得更加轻松。这也是“Pythonic”做事的方式(尽管我实际上会再创建至少一两个变量)。

dataset = "120 156 206" #Just a testing sample
delimiter = " "

print(delimiter.join([str(int(number_as_octal_string)) for number_as_octal_string in dataset.split(delimiter)]))

假设你只需要打印结果而不是保存它作为一个变量,你不需要join, 转换为 str 或检查分隔符。使用 print 函数的 sep 参数的默认值(即 space),您可以在一行简单的代码中完成所有操作:

print(*(int(oct, 8) for oct in dataset.split()))

这会解压将每个 space-separated 元素从字符串转换为八进制整数的结果。然后元素默认由 space 分隔(如上所述)并且 print 负责为您转换为字符串。

你们 none 人在星期天下午有更好的事情要做吗?

我开始写这篇文章时有 3 个回复,现在有 7 个。

我不确定是否可以勾选多个作为答案。他们都工作。这是Python最难的地方,做同一件事似乎有很多种方法。对于不是neuro-typical并且很容易开始想太多的人来说,我很快就瘫痪了。

@Tomerikoo - 我确实需要输出一个变量。到目前为止,我一直将它保留为打印件,以便我可以看到结果输出。它将形成一个函数。

这一次,我采用了@azro的解决方案。尽管如果可能的话,我也会尝试勾选其他人。不确定它是否允许我这样做。

最后,我把你所有的答案都抄到我的笔记本里了。因此,当我可怕的糟糕记忆力在未来让我失望时。你会再次帮助我的。