我有一个数组,例如
data = [
[1, 0],
[2, 0],
[3, 1],
[4, 1],
[5, 1],
[6, 0],
[7, 0]]
我希望结果是
verified_data = [[1, 0], [2, 0], [3, 1]]
因此,如果最后一个元素为0,以及最后N个元素相同(除了前一个1),我又如何删除它们。实现此目标的正确方法是什么?也可以使用numpy。
即使看起来很丑,也要按我写的解决方案进行编辑:
def verify_data(data):
rev_data = reversed(data)
for i, row in list(enumerate(rev_data )):
if row[1] == 0:
del data[- 1]
else:
break
rev_data = reversed(data)
last_same_data = None
for i, row in list(enumerate(rev_data)):
if not last_same_data:
last_same_data = row[1]
continue
if last_same_data == row[1]:
del data[-1]
else:
break
return data
答案 0 :(得分:2)
我将删除尾随零和删除尾随重复项分为两个函数。使用list [-n]索引可避免显式索引跟踪。
In [20]: def remove_trailing_duplicates(dat):
...: key=dat[-1][1]
...: while (len(dat)>1) and (dat[-2][1]==key):
...: dat.pop() # Remove the last item.
...: key=dat[-1][1] # Reset key to last item.
In [21]: def remove_trailing_zeros(dat):
# len(dat)>0 can give an empty list, >1 leaves at least the first item
...: while len(dat)>0 and dat[-1][1]==0:
dat.pop()
In [22]: data = [
...: [1, 0],
...: [2, 0],
...: [3, 1],
...: [4, 1],
...: [5, 1],
...: [6, 0],
...: [7, 0]]
In [23]: remove_trailing_zeros(data)
In [24]: data
Out [24]: [[1, 0], [2, 0], [3, 1], [4, 1], [5, 1]]
In [25]: remove_trailing_duplicates(data)
In [26]: data
Out[26]: [[1, 0], [2, 0], [3, 1]]
这与您在问题中使用的数据一起使用,并且仅检查重复项功能中剩余的一项。对于所有[n, 0]?
空列表或剩余的第一项,您想要什么?
HTH