我需要做一个看起来像1-N序列的排列,其中0填充#k。
这种方法有效,但使用内置函数有什么更简单吗?
def permshift(n,k):
return [0 if x == k else x+(x<k) for x in range(n)]
>>> permshift(7,0)
[0, 1, 2, 3, 4, 5, 6]
>>> permshift(7,1)
[1, 0, 2, 3, 4, 5, 6]
>>> permshift(7,2)
[1, 2, 0, 3, 4, 5, 6]
>>> permshift(7,3)
[1, 2, 3, 0, 4, 5, 6]
>>> permshift(7,4)
[1, 2, 3, 4, 0, 5, 6]
>>> permshift(7,5)
[1, 2, 3, 4, 5, 0, 6]
>>> permshift(7,6)
[1, 2, 3, 4, 5, 6, 0]
答案 0 :(得分:4)
只需创建一个新列表,然后在您需要的任何地方插入0
。
def permshift(n, k):
lst = range(1, n)
lst.insert(k, 0)
return lst
答案 1 :(得分:2)
更多行,但我认为它更简单:
def permshift(n, k):
x = range(1, n)
x.insert(k, 0)
return x
这是一个有趣的,比最常见的重复答案更短:
def permshift(n, k):
x = range(1, n)
return x[:k] + [0] + x[k:]
答案 2 :(得分:1)
呵呵 - 当很多人提出相同的解决方案时,这很有趣
def permshift(n,k):
r = range(1,n)
r.insert(k,0)
return r
为了完整性,如果你真的关心效率,这里是一个生成器表达式
def permshift(n,k):
for i in xrange(1,n):
yield i
if i == k:
yield 0
print list(permshift(7,2))
答案 3 :(得分:1)
已经有了很好的答案,但这里是踢腿和咯咯笑的单行版本:
permshift = lambda n,k: range(1, k+1) + [0] + range(k+1, n)
答案 4 :(得分:0)
from itertools import chain
def permshift(n,k):
return chain(xrange(1,k+1), [0], xrange(k+1,n))