2024-04-19 16:51:27 发布
网友
我试图从python中的列表中删除非重复字符。e、 g list=[1,1,2,3,3,3,5,6]应返回[1,1,3,3]。 我最初的尝试是:
def tester(data): for x in data: if data.count(x) == 1: data.remove(x) return data
这对某些输入有效,但对于[1,2,3,4,5],它返回[2,4]。有人能解释一下为什么会这样吗?在
有一个线性时间解决方案:
def tester(data): cnt = {} for e in data: cnt[e] = cnt.get(e, 0) + 1 return [x for x in data if cnt[x] > 1]
l=[1,1,2,3,3,3,5,6] [x for x in l if l.count(x) > 1] [1, 1, 3, 3, 3]
添加列表中至少出现两次的元素。在
在您自己的代码中,您需要将for x in data行更改为for x in data[:]:
for x in data
for x in data[:]:
使用data[:]可以迭代原始列表的copy。在
data[:]
copy
发生这种情况是因为您在遍历列表时正在从列表中删除。相反,可以考虑添加到新列表中。在
你也可以用集合。计数器,如果您使用的是2.7或更高版本:
[a for a, b in collections.Counter(your_list).items() if b > 1]
有一个线性时间解决方案:
添加列表中至少出现两次的元素。在
在您自己的代码中,您需要将
for x in data
行更改为for x in data[:]:
使用
data[:]
可以迭代原始列表的copy
。在发生这种情况是因为您在遍历列表时正在从列表中删除。相反,可以考虑添加到新列表中。在
你也可以用集合。计数器,如果您使用的是2.7或更高版本:
相关问题 更多 >
编程相关推荐