假设我有一个这样的Python列表:
letters = ['a','b','c','d','e','f','g','h','i','j']
我想在每第n个元素后插入一个'x‘,假设该列表中有三个字符。结果应该是:
letters = ['a','b','c','x','d','e','f','x','g','h','i','x','j']
我知道我可以通过循环和插入来做到这一点。我实际上正在寻找的是Pythonish式的方式,也许是一行程序?
发布于 2015-06-25 11:29:32
尝尝这个
i = n
while i < len(letters):
letters.insert(i, 'x')
i += (n+1)
其中,n
是要插入'x'
的元素数之后的值。
这是通过初始化变量i
并将其设置为等于n
来实现的。然后设置一个在i
小于letters
长度时运行的while
循环。然后在letters
中的索引i
处插入'x'
。然后,您必须将n+1
的值添加到i
。您必须执行n+1
而不仅仅是n
的原因是,当您在letters
中插入一个元素时,它会将列表的长度扩展一。
在您的示例中,当n
为3并且您想要插入'x'
时,它将如下所示
letters = ['a','b','c','d','e','f','g','h','i','j']
i = 3
while i < len(letters):
letters.insert(i, 'x')
i += 4
print letters
它会打印出来
['a', 'b', 'c', 'x', 'd', 'e', 'f', 'x', 'g', 'h', 'i', 'x', 'j']
这就是你的预期结果。
发布于 2015-06-25 11:57:48
尽管在for
循环中使用list.insert()
似乎更有效地利用内存,但是为了在一行中完成,您还可以在列表的每个nth
索引上分割的每个等分块的末尾附加给定值。
>>> from itertools import chain
>>> n = 2
>>> ele = 'x'
>>> lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(chain(*[lst[i:i+n] + [ele] if len(lst[i:i+n]) == n else lst[i:i+n] for i in xrange(0, len(lst), n)]))
[0, 1, 'x', 2, 3, 'x', 4, 5, 'x', 6, 7, 'x', 8, 9, 'x', 10]
发布于 2016-07-14 00:20:13
我想为每个项目添加一个新元素。
这个怎么样?
a=[2,4,6]
for b in range (0,len(a)):
a.insert(b*2,1)
A现在是
[1, 2, 1, 4, 1, 6]
https://stackoverflow.com/questions/31040525
复制相似问题