比较当前和下一个项目,条件满足则跳过下一个项目
假设我有一个嵌套的列表,我想要逐个检查里面的元素,看看是否满足某个条件(比较当前元素和下一个元素),一直检查到最后一个元素。我该怎么做呢?如果条件满足了,我又该如何让指针跳过下一个元素,继续检查后面的元素,也就是说跳过 i+1,继续检查 i+2 呢?
list = [[1, 3], [2, 1], [2, 1], [4, 2], [5, 1], [5, 1]]
for i, j in enumerate(list):
if j[i] == list[i+1]: #compare current and next item, but this will fail for the last item
#set j[i] = "1st duplicate" and list[i+1] = "2nd duplicate"
# move pointer to [i+2]
else:
set j[i] = "ok"
>>>> [ ["ok"],["1st duplicate"], ["2nd duplicate"], ["ok"],["1st duplicate"], ["2nd duplicate"] ]
2 个回答
0
你可以把原来的列表和一个去掉第一个元素的副本列表合在一起,方法是这样的:
for first, second in zip(my_list, my_list[1:]):
...
你完全不用担心索引的问题。
0
去到倒数第二个元素。
for i, j in enumerate(my_list[:-1])
在最后一次检查时,j
将是倒数第二个元素,而 my_list[i+1]
将是最后一个元素。
如果你想检查子元素,你需要使用 my_list[i+1][1]
或 my_list[i+1][0]
。
另外,不要把 list
用作变量名,因为这会覆盖掉内置的 list
。
这样就能得到你想要的输出。
for i, j in enumerate(my_list[:-1]):
if j[1] == my_list[i+1][1]:
my_list[i]=["1st duplicate"]
my_list[i+1 ]= ["2nd duplicate"]
elif my_list[i] not in [["1st duplicate"],["2nd duplicate"]]:
my_list[i] = [ "ok"]
[['ok'], ['1st duplicate'], ['2nd duplicate'], ['ok'], ['1st duplicate'], ['2nd duplicate']]