python固定字符串大小

时间:2012-05-08 22:54:30

标签: python string

假设我需要一个 n 元素,每个元素用空格分隔。此外,我需要 ith 元素为1,其余为0。什么是最简单的pythonic方法呢?

因此,如果我需要n = 10i = 2 0 1 0 0 0 0 0 0 0 0

我想要一些你可以用C ++获得的new string[],但Python版本却让我望而却步。

谢谢!

5 个答案:

答案 0 :(得分:6)

使用列表。

n = 10
i = 2

mylist = ["0"] * n
mylist[i-1] = "1"
print " ".join(mylist)

答案 1 :(得分:2)

以下Python生成器表达式应该产生您要查找的内容:

" ".join("1" if i == (x+1) else "0" for x in range(n))

答案 2 :(得分:1)

Python REPL中的以下示例应该对您有所帮助。 Python生成器表达式" ".join(bin((1<<n)+(1<<n>>i))[3:])应该是一个解决方案。

>>> n=10
>>> i=2
>>> " ".join(bin((1<<n)+(1<<n>>i))[3:])
'0 1 0 0 0 0 0 0 0 0'

答案 3 :(得分:0)

这看起来像是家庭作业,所以我用英语而不是Python来描述我的答案。

使用列表推导创建n字符串列表,从'1'中选择每个元素(如果项目的索引为i)和'0'(除此以外)。加入列表中的元素,并在它们之间留一个空格。

有几种方法可以根据布尔值从两个项目中进行选择。其中一个是将两个项目放在一个序列中,并使用布尔值索引序列,从而选择第一个元素False,第二个元素True。在这种特殊情况下,您还可以通过多种方式将布尔值转换为'0''1'(例如,转换为整数,然后转换为字符串)。

我不理解new string[]评论 - 这不是C ++语法。

修改

这是Python:

' '.join([('0', '1')[x == i - 1] for x in range(n)])

' '.join([str(int(x == i - 1)) for x in range(n)])

我更喜欢前者 - 很明显它会生成零和一个,并且可以轻松地将它们更改为其他内容。 i - 1代替i来调整i是基于一的,x是基于零的。通常,我不会这样做。在所有条件相同的情况下,除了输入和输出格式需要基于一个值的值时,我更喜欢使用从零开始的索引。在这种情况下,我会尽快转换输入并尽可能晚地输出,并且绝对避免在同一位代码中混合两者。

您可以安全地删除方括号,将列表理解转换为生成器理解。对于大多数意图和目的,它们都是一样的。

答案 4 :(得分:0)

只需使用“+”连接字符串:

("0 "*i + "1 " + "0 "*(n-i-1))[:-1]

或者您也可以使用bytearray:

a = bytearray(("0 "*n)[:-1])
a[i*2] = "1"
print str(a)