重复元素序列中的中间元素只能保留。例如,处理了像[1,2,1,3,1]这样的列表,其输出应该是[2,1,3],因为列表中有三个“1”,红色的可以保留为中间的一个,第一个和第三个被删除。如果重复元素的数量是偶数,则保留中间的右边元素。例如,[ 1,2,1,3,1,1]的输出是[2,3,1],因为有四个1,第三个(或红色)是中间的那个。下面有更多的例子来帮助你理解这个规则。列表中的红色元素是应该保留的元素。
[2,1,2,3,1] -> [2,3,1]
[3,2,1] -> [3,2,1]
[1,2,3,3,2,1] -> [3,2,1]
[3,2,1,1,2,3,2,1,3,2] -> [1,3,2]
Photo of the question
我试图实现这一点,但我得到了以下输出。下面是我的实现。
def remove_duplicates(numbers):
# Step 1: Initialize dictionary to track count and index
count_dict = {}
# Step 2: Count occurrences and store index
for index, num in enumerate(numbers):
if num in count_dict:
count_dict[num].append(index)
else:
count_dict[num] = [index]
# Step 3: Initialize list for final unique elements
unique_elements = []
# Step 4: Determine unique elements based on the rule
for num, indices in count_dict.items():
count = len(indices)
if count == 1:
unique_elements.append(num)
else:
middle_index = indices[count // 2 + count % 2 - 1]
unique_elements.append(numbers[middle_index])
# Step 5: Return the list of unique elements
return unique_elements
输出:
# expected
[1, 3, 2]
# got
[3, 2, 1]
2条答案
按热度按时间w6lpcovy1#
使用
collections.defaultdict
按值对索引进行分组。拉取每组的中间索引。对结果索引进行排序,并使用它们从原始列表中检索相应的值。ifmq2ha22#
我只需要创建一个元素计数器。然后遍历列表,减少计数器,如果计数== 0,则将项添加到输出: