我得到了以下任务:创建一个函数,它将接收不同元素列表作为参数,并返回原始元素列表(列表中每个元素的计数不应超过1)。元素的顺序应该保留。如下所示:
[1, 1.0, '1', -1, 1] # input
[1, 1.0, '1', -1] # output
我试过
def original_list(*a):
b=[]
for i in a:
if i not in b:
b.append(i)
return b
但[1, '1', -1]
获得了1==1.0
,True
为<input type="text" id="datepicker"/>
。那么如何强制Python“区分”int和浮动相同值的元素并获得正确的输出列表?
答案 0 :(得分:2)
如果订购并不重要,只需使用类型和设置理解。
input = [1, 1.0, '1', -1, 1]
output = [x[0] for x in {(y, type(y)) for y in input}]
print output
您可以使用相同的想法来保留订购。
output = []
output_filter = set()
for y in input:
if (y, type(y)) not in output_filter:
output_filter.add((y, type(y)))
output.append(y)
print output
答案 1 :(得分:1)
对您的解决方案进行一些修改:
def original_list(a):
b=[]
for i in a:
if i not in b or not isinstance(i,int):
b.append(i)
return b
答案 2 :(得分:1)
您还可以执行以下操作:
>>> example_list = [1, 1.0, '1', -1, 1, 1.0]
>>> output = []
>>> for item in example_list:
indexes = [i for i, x in enumerate(output) if x==item]
if not indexes:
output.append(item)
elif not filter(lambda index: type(item) == type(output[index]) , indexes):
output.append(item)
indexes = []
我们有一个输入列表和一个最初为空的output
列表。首先,我们迭代输入列表的每个item
。我们计算indexes
列表中与输入列表中的output
相等的所有元素的item
。
如果indexes
列表为空,我们会将item
附加到output
列表。否则,对于output
列表中的每个索引,我们过滤掉那些item
类型的索引,并且该索引的output
列表中的元素类型相同。如果过滤后获得的列表为空,我们会将item
附加到output
列表,否则该类型的item
已添加到output
列表中。
迭代后,output
列表是我们的最终列表。
>>> output
[1, 1.0, '1', -1]
这将保留订单并过滤掉重复项,从而省略不同类型的唯一值。