2013-04-18 78 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

相關問題