2013-04-18 47 views
0

我有一个列表(列表1)的另一个列表如下:Python的前面加上在列表元素为字符串

[0, 1, 2] 

我想每一个元素,预先准备的字符串列表(list2):

['Start|983471|String1|True\n', 
'Start|983472|String2|True\n', 
'Start|983473|String3|True\n'] 

给:

['0|Start|983471|String1|True\n', 
'1|Start|983472|String2|True\n', 
'2|Start|983473|String3|True\n'] 

我的代码:

Finallist = [] 
x=0 
while x < len(list1): 
    for line in list2: 
     Finallist.append("|".join((str(list1[x]),line))) 
    x+=1 

这给出了9行。怎么了? 我期望每个项目都被添加。

回答

1

enumeratezip将做的工作:

list1 = [0, 1, 2] 

data1 = ['Start|983471|String1|True\n', 
'Start|983472|String2|True\n', 
'Start|983473|String3|True\n'] 

for i, (line, num) in enumerate(zip(data1[:], list1)): 
    data1[i] = str(num) + '|' + line 

print(data1) 

输出:

['0|Start|983471|String1|True\n', '1|Start|983472|String2|True\n', '2|Start|983473|String3|True\n'] 
3

与您的代码的问题是,您有效地有2种循环,一种通过x去从0到列表的长度,另外一个通过各线变为列表中的,所以它看起来像:

for x in range(len(list1)): 
    for line in list2: 
     Finallist.append("|".join((str(list1[x]),line))) 

因此,您将通过list1在每次迭代中追加每一行。你可能想要的东西,如:

for x in range(len(list1)): 
    Finallist.append("|".join((str(list1[x]),list2[x]))) 

下面是如何使用列表理解做更紧凑:

>>> list1 = [0, 1, 2] 
>>> list2 = ['Start|983471|String1|True\n', 
'Start|983472|String2|True\n', 
'Start|983473|String3|True\n'] 
>>> ['{0}|{1}'.format(num, s) for num, s in zip(list1, list2)] 
['0|Start|983471|String1|True\n', '1|Start|983472|String2|True\n', '2|Start|983473|String3|True\n'] 

我观察你只是用每一行的指数,因此,你可以使用:

['{0}|{1}'.format(i, s) for i, s in enumerate(list2)] 
0

不使用for循环..。 while循环就足够了。

list1=['Start|983471|String1|True\n', 'Start|983472|String2|True\n', 'Start|983473|String3|True\n'] 
list2=['1','2','3'] 
Finallist = [] 
x=0 
while x < len(nk): 
    Finallist.append(str(list2[x])+'|'+list1[x]) 
    x+=1 
+0

两者的索引,这就是我出错的地方。所有建议都非常好。谢谢。 – user1862895

相关问题