这个程序应该从列表中删除重复的元素,但它似乎不起作用,
import random
def func():
a=random.sample(range(10),7)
b=random.sample(range(10),6)
list=a+b
print(list)
print(len(list))
for x in list:
for y in list:
if x==y and list.index(x)!=list.index(y):
list.remove(y)
print(func())
输出
[2, 6, 4, 7, 0, 9, 3, 8, 3, 5, 7, 0, 1]
13
None
答案 0 :(得分:1)
我已经使用索引来从列表中检索元素,
import random
def func():
a=random.sample(range(10),7)
b=random.sample(range(10),6)
list1=a+b
print(list1)
print(len(list1))
for i in range(len(list1)-1):
for j in range(i+1,len(list1)):
if list1[i]==list1[j]:
list1.remove(list1[j])
break
return list1
print(func())
正如其他人使用set()来解决这个问题一样令人印象深刻,但我想你是一个像我这样的初学者,所以我就像你一样从基础知识中编写这个程序。
答案 1 :(得分:0)
您没有从func()
返回任何内容,因此默认返回None
。
要返回内容,请使用return
。
import random
def func():
a=random.sample(range(10),7)
b=random.sample(range(10),6)
list=a+b
print(list)
print(len(list))
for x in list:
for y in list:
if x==y and list.index(x)!=list.index(y):
list.remove(y)
return(list)
print(func())
还有一种更简单的方法。
import random
def func():
a=random.sample(range(10),7)
b=random.sample(range(10),6)
random_list = a + b
print(random_list, len(random_list))
seen = set()
nondup_list = [x for x in random_list if not (x in seen or seen.add(x))]
return(nondup_list)
print(func())
set根据定义只能包含唯一元素 - 因此,转换为集合可以删除重复项。但是,默认情况下它是无序的,因此我们不是仅仅转换到一个集合,而是逐个将成员添加到新列表中,检查它们是否已经不在我们的新列表中,如果它们不是,将它们添加到我们的seen
集。将该方法归功于Martin Broadhurst
答案 2 :(得分:0)
我会把它作为答案。但请注意,您应该澄清您的头衔。
首先,如果您的主要目标是删除重复内容,那么您最好的选择是将list
强制转换为set
,因为set
内部不允许重复。
a=random.sample(range(10),7)
b=random.sample(range(10),6)
my_list=a+b
print(set(list))
另请注意,您可以使用它来获得更好的输出:
a=random.sample(range(10),7)
b=random.sample(range(10),6)
my_list=a+b
print (','.join(str(v) for v in set(my_list)))
答案 3 :(得分:0)
除了所有其他好的答案,如何获得结果,你正在寻找逻辑是有缺陷的。
a_list.index(value)
将始终返回列表中的value
的第一个实例。
在您的实例中list.index(x) != list.index(y)
永远不会成为现实,因为您始终会匹配x
和y
所代表的值的第一个匹配项。
因此,只要x == y
,list.index(x)
始终等于list.index(y)
。