我有一个清单
string = ['a', 'b', 'c', 'd', 'e', 'f']
我正在尝试在列表的每两个字符之间创建一个空格,以便它成为:
['a', 'b', ' ', 'c', 'd', ' ', 'e', 'f']
我试过这个:
test = 0
while test != len(string):
for i in range(2):
string.append(' ')
test = test + 1
print (string)
但它给出了这个错误:
Traceback (most recent call last):
File "D:/Python/New folder (3)/test.py", line 8, in <module>
string.append(' ')
MemoryError
答案 0 :(得分:0)
您的测试永远不会通过,因为您每次都会附加到列表中。你实际上是追加到列表的末尾,所以你不会得到你想要的东西。
一种方法可以是使用列表理解:
2309 vs. 11591
这可以在一行中完成:
string = ['a', 'b', 'c', 'd', 'e', 'f']
#insert a space every two characters
new_string = [[s, " "] if i % 2 else s for i, s in enumerate(string)]
#flatten the list
new_string = [item for sublist in new_string for item in sublist]
答案 1 :(得分:0)
你可以这样做:
string = ['a', 'b', 'c', 'd', 'e', 'f']
newstring = []
i = 1
for x in string:
if i > 2:
newstring.append(' ')
newstring.append(x)
i = 1
else:
newstring.append(x)
i += 1
print newstring
使用此方法似乎更清楚,它返回相同的结果。
答案 2 :(得分:0)
由于没有人真正正确地解释了您的错误:
你的while test != len(string):
永远不会是真的,因为你继续追加到原始列表,所以列表一直在增长和增长,直到你最终用完RAM /内存,你不应该迭代并追加到同一个列表,你需要制作一个副本,或者只是创建一个新的空列表并追加到那个。
列表以6个元素开头,在再次测试条件之前再添加2个元素并将test
增加1,所以在第一个循环之后,你现在在列表中有8个元素,测试是1,接下来循环你有10,测试是2,依此类推,直到你的内存耗尽......
有更好的方法,但如果您使用循环并插入原始列表,您将从第三个元素开始并使用3的步骤:
string = ['a', 'b', 'c', 'd', 'e', 'f']
for i in range(2, len(string)+2, 3):
string.insert(i, " ")
print (string)
['a', 'b', ' ', 'c', 'd', ' ', 'e', 'f']
您还可以使用itertools.chain并使用ind < len(string) - 1
在末尾捕获额外的空格:
from itertools import chain
print(list(chain.from_iterable((ele, " ") if ind % 2 and ind < len(string) - 1 else ele
for ind, ele in enumerate(string))))
['a', 'b', ' ', 'c', 'd', ' ', 'e', 'f']
答案 3 :(得分:0)
它不是一个紧凑的解决方案,但它的实力:
a= ['1', '2','3','4','5','6']
分组'a',共2个字符:
for x in range(int(len(a)/2)):
a[x]=a[x]+a.pop(x+1)
然后,a将成为
['12', '34', '56']
为每个项目(最后一个除外)添加空格:
for x in range(int(len(a))-1):
a[x]=a[x]+" "
现在让我们制作一个新列表,分割每个'a'项目:
b=[]
for x in range(int(len(a))):
b.extend(list(a[x]))
结果:
['1', '2', ' ', '3', '4', ' ', '5', '6']
答案 4 :(得分:-1)
使用insert,而不是追加。追加到最后。
string = ['a', 'b', 'c', 'd', 'e', 'f']
string.insert(4, ' ')
string.insert(2, ' ')
或构建一个包含所需空格的全新列表。
out = []
for i, char in enumerate(string):
out.append(char)
if i != 0 and i % 2 != 0:
out.append(' ')
内存错误是由while循环永不停止引起的。测试每次迭代增加一个,但列表增长2。