擅长:python、mysql、java
<p>代码的问题是,您首先要附加上一个数据元素,然后如果当前变量和上一个变量相同,则您要删除最后一个元素,但您没有考虑的是,在中删除上一个元素后添加当前元素后:</p>
<pre><code>dq.pop()
dq.append(data[i])
</code></pre>
<p>在下一次迭代中,您将再次将先前添加的元素添加到:</p>
<pre><code>dq.append(data[i-1])
</code></pre>
<p>因此,如果满足“if”条件,那么它将只从dq中删除最后一个元素(即数据[i-1]),而不是先前在dq中输入的最后一个元素。因此,在这里,它与相同的元素被复制</p>
<p>您可以尝试以下代码:</p>
<pre><code>import collections
data = [
{'name': 'Atomic', 'age': 28},
{'name': 'Atomic', 'age': 28},
{'name': 'Atomic', 'age': 28},
{'name': 'Atomic', 'age': 29},
{'name': 'Atomic', 'age': 29},
{'name': 'Atomic', 'age': 30},
]
dq = collections.deque()
dq.append(data[0])
for i in range(1, len(data)):
prev_name = dq[-1]['name']
prev_age = dq[-1]['age']
next_name = data[i]['name']
next_age = data[i]['age']
if prev_name == next_name and prev_age == next_age:
continue
else:
dq.append(data[i])
print(dq)
</code></pre>
<p>输出:</p>
<pre><code>deque([{'name': 'Atomic', 'age': 28}, {'name': 'Atomic', 'age': 29}, {'name': 'Atomic', 'age': 30}])
</code></pre>