如何在 python 列表中查找唯一元素? (不使用套装)

新手上路,请多包涵

编写一个函数,它接受一个输入列表并返回一个仅包含唯一元素的新列表(元素应该只在列表中出现一次,并且元素的顺序必须保留为原始列表。)。

 def unique_elements (list):
    new_list = []
    length = len(list)
    i = 0
    while (length != 0):
        if (list[i] != list [i + 1]):
            new_list.append(list[i])
        i = i + 1
        length = length - 1
    '''new_list = set(list)'''
    return (new_list)

#Main program
n = int(input("Enter length of the list: "))
list = []
for i in range (0, n):
    item = int(input("Enter only integer values: "))
    list.append(item)
print ("This is your list: ", list)
result = unique_elements (list)
print (result)

我被这个错误困住了:

IndexError:列表索引超出范围

原文由 Karan Thakkar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 970
2 个回答

这是最简单的方法:

 a = [1, 2, 2, 3]
b = []
for i in a:
    if i not in b:
        b.append(i)
print (b)
[1, 2, 3]

原文由 Joe T. Boka 发布,翻译遵循 CC BY-SA 3.0 许可协议

您的代码的问题是您正在循环 length 次但检查 list[i]list[i+1] 过去(例如在访问输入元素列表的末尾一个包含 6 个元素的列表有 6-1=5 对连续元素)。

您的代码的第二个问题是只有一个元素 [1] 的输入应该作为输出 [1] 即使这个元素与任何其他元素没有不同。输入文本意味着您应该删除与已存在的其他元素相同的元素,而不是您应该保留与下一个元素不同的元素。

另一个问题是您只检查 连续 的重复项,即给定输入列表 [1, 2, 1, 2] 您的逻辑不会检测到任何重复…看起来练习在这种情况下需要作为 [1, 2] 的输出 ---

执行此操作的简单算法的跟踪是

for each element in input
   if the element has not been included in output
       add the element to the end of output

另请注意,要检查列表中是否存在某个元素,Python 提供了 in 运算符(例如 if x in output: ... ),它可以为您节省该部分的显式循环。

作为旁注,命名输入参数 list 在 Python 中被认为是不好的做法,因为 list 是预定义函数的名称,您的参数隐藏了它。

原文由 6502 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题