【问题标题】:Python 'NoneType' itterable in list operation列表操作中的 Python 'NoneType' 可迭代
【发布时间】:2014-12-29 09:37:32
【问题描述】:

我正在编写一个函数来删除一个列表中的重复项。具体:

输入:一个列表

输出:没有任何重复的列表

这是我的代码:

def remove_duplicate(s_list):
    for member in s_list:
        for other in s_list.remove(member):
            if other == member:
                s_list.remove(other)
    return s_list

之后,我尝试运行remove_duplicate([1,2,3,4]),错误是

for other in s_list.remove(member):
  TypeError: 'NoneType' object is not iterable

【问题讨论】:

  • list.remove就地,它没有return 任何东西。此外,不要在迭代列表时修改列表。
  • 您可以使用list(set(s_list)) 删除重复项。
  • 但是请注意,sets 不保证订单。你应该看看stackoverflow.com/q/7961363/3001761

标签: python duplicates iterable nonetype


【解决方案1】:

如果可能的话,我建议使用两个列表而不是就地更改一个列表。

如果顺序不重要,可以使用set:

dup_list = [1,1,2,3,2,5,2]
dupfree_list = list(set(dup_list))

否则,如果元素的顺序很重要,你可以记下你已经看过哪些元素:

dupfree_list = []
for e in dup_list:
  if e not in dupfree_list:
    dupfree_list.append(e)

【讨论】:

    【解决方案2】:

    我认为最 Pythonic 的方法是使用 set 删除重复项:

    listwithduplicates = [1,2,3,3]
    listwithduplicates = set(listwithduplicates)
    

    结果是:

    {2,1,3}
    

    请注意,集合的排序方式与列表不同。

    【讨论】:

    • 请注意,sets 不是有序的
    猜你喜欢
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多