假设我需要一个 n 元素,每个元素用空格分隔。此外,我需要 ith 元素为1
,其余为0
。什么是最简单的pythonic方法呢?
因此,如果我需要n = 10
和i = 2
0 1 0 0 0 0 0 0 0 0
我想要一些你可以用C ++获得的new string[]
,但Python版本却让我望而却步。
谢谢!
答案 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)