listsal2 = [1,2,2,3,3,4,5,6,7,8]
listsal3 = []
counter = 0
for i in listsal2:
item = listsal2.count(i)
if item > 1:
counter = item
while counter > 1:
listsal3.append(i)
counter = counter - 1
print (listsal3)
我一直在处理模式功能,但出于某种原因,它会将最后几个数字保留在列表中,列表中的项目越多,删除的数量就越多。
编辑:刚刚意识到我忘记了现在在中的代码的第二部分EDIT2:代码缩小并更易于阅读
EDIT3:更改了代码,以便重复的数字进入新的列表,但它有多个列表项的数量
感谢大家的帮助,我想我现在已经得到了它
答案 0 :(得分:0)
在您的情况下,即使您考虑i=2
一次,您也会再次浏览列表2,因为它存在多次。这就是2和3两次以listsal3
结束的原因。相反,您想要做的只是为每个唯一项目浏览一次列表。
listsal2 = [1,2,2,3,3, 4]
newlist = set(listsal2)
listsal3 = []
counter = 0
for i in newlist:
item = listsal2.count(i)
if item > 1:
counter = item
print counter
while counter > 1:
listsal3.append(i)
counter = counter - 1
print listsal2, listsal3
要从列表中获取唯一项目,请将其转换为一组。
另一种方法: 只需保留一个包含每个唯一元素的计数的列表,取其最大值,然后追溯到它对应的元素。
newset = set(listsal2)
newlist = list(set)
counts = []
for item in newlist:
counts.append(listsal2.count(item))
maxcount = max(counts)
max_occurring_item = newlist[counts.index(maxcount)]
答案 1 :(得分:-1)
您在迭代时修改列表。通常不推荐这样做,因为它会破坏迭代。
如果要删除所有单个和重复元素,以下代码将执行:
l = listsal2
l = [v for i, v in enumerate(l) if l.count(v) > 1 and l.index(v) == i]
这会保留原始列表中的顺序。