2014-09-12 128 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