擅长:python、mysql、java
<p>你可以试试</p>
<pre><code>In [3]: [value for _, value in frozenset((type(x), x) for x in l)]
Out[3]: [1.0, '1', 1, 'dsa', 'asd']
</code></pre>
<p>我们创建一个包含元素及其类型的(临时)元组<a href="https://docs.python.org/3.3/library/stdtypes.html#set-types-set-frozenset" rel="nofollow">^{<cd1>}</a>,以保持元素相等(例如<em>1</em>、<em>1.0</em>和<em>True</em>),但类型不同。然后我们迭代它,解压元组并检索元素(<code>value</code>)。你知道吗</p>
<p>当然,我们也可以使用普通的<code>set</code>,它是可变的,但是我们不需要可变的,因为我们的集合是临时的。你知道吗</p>
<p>请注意,这不一定会保留原始顺序。你知道吗</p>
<hr/>
<p>如果需要保留原始顺序,请使用<a href="https://docs.python.org/3.3/library/collections.html#collections.OrderedDict" rel="nofollow">^{<cd4>}</a>,这是一个哈希映射(与常规的<a href="https://docs.python.org/3.3/library/stdtypes.html#dict" rel="nofollow">^{<cd5>}</a>类似),因此其工作方式类似于<code>frozenset</code>/<code>set</code></p>
<pre><code>In [16]: from collections import OrderedDict
In [17]: [value for _, value in OrderedDict.fromkeys((type(x), x) for x in l)]
Out[17]: ['asd', 'dsa', 1, '1', 1.0]
</code></pre>