2014-09-12 132 views
0

我是Python的初學者,我對遍歷列表中的一系列元素有疑問。遍歷Python中列表中的元素範圍

我有這樣的名單:

['0.95', '0.05', '0.94', '0.06', '0.29', '0.71', '0.001', '0.999'] 

假設,在第一位置開始,我想通過兩個元素的範圍進行迭代:代前兩個,留下接下來的兩個,因爲他們,然後再次替換下兩個:

[-, -, '0.94', '0.06', -, -, '0.001', '0.999'] 

我也希望能夠在任何位置開始。例如,使用相同的範圍內之前,但在第三位置開始:

['0.95', '0.05', -, -, '0.29', '0.71', -, -] 

我試圖與三個參數範圍內,但它僅替換的範圍內的範圍內的第一位置時,不是所有的元件。

+1

這將是非常有益的,以顯示你嘗試過什麼樣的代碼。 – Kostronor 2014-09-12 11:56:57

+0

@ BatuDog88,當你說替換時,你的意思是用'-'替代它們還是還有別的嗎? – 2014-09-12 11:58:33

+0

實際上,我假裝刪除這些元素(而不是替代它們),但是在刪除列表中的元素之前遇到了麻煩,因爲在下一次迭代中列表大小不同,並且它不會刪除我想要的元素,所以首先我替換這些元素,然後從列表中刪除所有「 - 」。也許效率不高,但它適用於我。 – BatuDog88 2014-09-12 13:13:17

回答

2
l = ['0.95', '0.05', '0.94', '0.06', '0.29', '0.71', '0.001', '0.999'] 

def subDashes(l, start): 
    newL = [] 
    for index, elem in enumerate(l): 
     if index%4 == start or index%4 == start+1: 
      newL.append('-') 
     else: 
      newL.append(elem) 
    return newL 

>>> subDashes(l, 0) 
['-', '-', '0.94', '0.06', '-', '-', '0.001', '0.999'] 

>>> subDashes(l, 1) 
['0.95', '-', '-', '0.06', '0.29', '-', '-', '0.999'] 

>>> subDashes(l, 2) 
['0.95', '0.05', '-', '-', '0.29', '0.71', '-', '-'] 
+0

爲什麼不只是用'l'替換值,所以你不必創建一個新的列表? 'l [i] ='-'',你可以刪除'else'子句 – 2014-09-12 11:59:41

+1

我不確定他們是否想要修改它們的原始列表,所以我做了一個新的以防萬一。 – CoryKramer 2014-09-12 12:00:51

0

將開始替換爲所需的起始值。

l = ['0.95', '0.05', '0.94', '0.06', '0.29', '0.71', '0.001', '0.999'] 


def dash(l,start): 
    for i in range(start,len(l)): 
     if (i - start) % 4 == 0 or (i - start) % 4 == 1: 
      l[i] = '-' 
    return l 

print dash(l,start = 2) 
+0

此帖已被自動標記爲低級,因爲沒有解釋,只有代碼;如果沒有改進,可能會被刪除。 – nalply 2014-09-12 12:59:13

1

最簡單的,我認爲是最好的,這樣做,這是這樣的:

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

replace_list= ['-','-','-','-'] 

seq[::4] = replace_list[::2] 
seq[1::4] = replace_list[1::2] 

print seq 

輸出:

['-', '-', 3, 4, '-', '-', 7, 8] 

要啓動該項目開始只是做:

replace_list= ['-','-','-'] 

starting_item=3 
seq[starting_item::4] = replace_list[::2] 
seq[starting_item+1::4] = replace_list[1::2] 

請注意,replace_lis t必須在seq列表中包含要替換的特定數量的元素。

輸出:

[1, 2, 3, '-', '-', 6, 7, '-'] 

如果要替換總是以相同的值的所有項目,你可以這樣做:

starting_item=3 

last_part = min((len(seq) - starting_item) % 4, 2) 
size = ((len(seq) - starting_item)/4) * 2 + last_part 
replace_list= ['-']*size