2015-11-26 39 views
4

我得到一個數組形成一個CSV文件,我得到的,看起來像的Python - 插入名單

my_list = ["Nov '15", '75', '49', '124', '62', '18', '80', '64.5', '', '', '', '', '', '', '', ''] 

,現在我想,以填補那裏是''與項目的數組是斑點的列表那長度,可以說我想放在那裏的陣列是

new_array = [1,2,3,4,5,6,7,8] 

這是我正在嘗試,但它不起作用。

i = 0 
for item in new_array: 
    index = 8+i 
    print item 
    my_list.insert(index, item) 
    i += 0 

它不會改變任何東西my_list是一樣的嗎?

我該如何改變這種情況?

感謝

+0

' '''總是開始於指數8? –

回答

3

試試這個:

i = 8 
for item in new_array: 
    my_list[i] = item # you want to replace the value 
    i += 1   # you forgot to increment the variable 

你不是遞增變量i,並insert()移動項目的權利,它不能取代它們。當然,一個更地道的解決辦法是:

my_list = my_list[:8] + new_array 
0
my_list = ["Nov '15", '75', '49', '124', '62', '18', '80', '64.5', '', '', '', '', '', '', '', ''] 
new_array = [1,2,3,4,5,6,7,8] 
i = 0 
for item in new_array: 
    index = 8+i 
    print item 
    my_list.remove('') 
    my_list.insert(index, item) 
    i += 1 
print my_list 

輸出:

1 
2 
3 
4 
5 
6 
7 
8 
["Nov '15", '75', '49', '124', '62', '18', '80', '64.5', 1, 2, 3, 4, 5, 6, 7, 8] 
0

事情是這樣的:

new_iter = iter(new_array) 
my_list = [i if i != '' else next(new_iter) for i in my_list] 
print(my_list) 
0

該代碼將與''(空字符串)工作從任何索引開始:

my_list = ["Nov '15", '75', '49', '124', '62', '18', '80', '64.5', '', '', '', '', '', '', '', ''] 

starts_at = my_list.index('') 
amount_of_empty_strings = 0 

for i, item in enumerate(my_list): 
    if item.strip() == "": 
     my_list[amount_of_empty_strings+starts_at] = amount_of_empty_strings+1 
     amount_of_empty_strings+=1 

print my_list 

輸出:

["Nov '15", '75', '49', '124', '62', '18', '80', '64.5', 1, 2, 3, 4, 5, 6, 7, 8] 
0

使用列表理解

>>> new_array = [1,2,3,4,5,6,7,8] 
>>> new_array.reverse() 
>>> new_array 
[8, 7, 6, 5, 4, 3, 2, 1] 
>>> [new_array.pop() if item is '' else item for item in my_list] 
["Nov '15", '75', '49', '124', '62', '18', '80', '64.5', 1, 2, 3, 4, 5, 6, 7, 8] 

OR

>>> from collections import deque 
>>> new_array = deque([1,2,3,4,5,6,7,8]) 
>>> [new_array.popleft() if item is '' else item for item in my_list] 
["Nov '15", '75', '49', '124', '62', '18', '80', '64.5', 1, 2, 3, 4, 5, 6, 7, 8]