我是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', -, -]
我尝试了三个参数的范围,但它只替换范围中的第一个位置,而不是范围内的所有元素。
答案 0 :(得分: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', '-', '-']
答案 1 :(得分: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_list必须具有要在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
答案 2 :(得分:0)
将start替换为所需的起始值。
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)