Python添加到列表中

时间:2015-06-06 23:47:59

标签: python list

我有一个清单

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

5 个答案:

答案 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。