如何区分相同的 int 和 float 元素?
How to distinguish same int and float elements?
我有以下任务:创建一个函数,它将接收不同元素列表和 return 原始元素列表作为参数(列表中每个元素的数量不应超过 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
但在 return 中得到了 [1, '1', -1]
,因为 1==1.0
是 True
。那么如何强制Python到"distinguish"相同值的int和float元素并得到正确的输出列表呢?
如果顺序不重要,只需使用类型和集合理解。
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
对您的解决方案稍作修改:
def original_list(a):
b=[]
for i in a:
if i not in b or not isinstance(i,int):
b.append(i)
return b
您还可以执行以下操作:
>>> 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
。我们计算 output
列表中等于输入列表中 item
的所有元素的 indexes
。
如果 indexes
列表为空,我们将 item
附加到 output
列表。否则,对于 output
列表中的每个索引,我们过滤掉那些 item
类型和 output
列表中元素类型相同的索引。如果过滤后得到的列表为空,我们将 item
添加到 output
列表,否则该类型的 item
已经添加到 output
列表。
迭代后,output
列表就是我们的最终列表。
>>> output
[1, 1.0, '1', -1]
这将保留顺序并过滤掉重复项,而忽略不同类型的唯一值。
我有以下任务:创建一个函数,它将接收不同元素列表和 return 原始元素列表作为参数(列表中每个元素的数量不应超过 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
但在 return 中得到了 [1, '1', -1]
,因为 1==1.0
是 True
。那么如何强制Python到"distinguish"相同值的int和float元素并得到正确的输出列表呢?
如果顺序不重要,只需使用类型和集合理解。
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
对您的解决方案稍作修改:
def original_list(a):
b=[]
for i in a:
if i not in b or not isinstance(i,int):
b.append(i)
return b
您还可以执行以下操作:
>>> 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
。我们计算 output
列表中等于输入列表中 item
的所有元素的 indexes
。
如果 indexes
列表为空,我们将 item
附加到 output
列表。否则,对于 output
列表中的每个索引,我们过滤掉那些 item
类型和 output
列表中元素类型相同的索引。如果过滤后得到的列表为空,我们将 item
添加到 output
列表,否则该类型的 item
已经添加到 output
列表。
迭代后,output
列表就是我们的最终列表。
>>> output
[1, 1.0, '1', -1]
这将保留顺序并过滤掉重复项,而忽略不同类型的唯一值。