"index"属性 - Python

tul*_*ans 5 python indexing

当我正在阅读这个答案/sf/answers/688898101/关于从字符串中删除重复项的问题时,我无法理解该index属性的含义

''.join(sorted(set(foo), key=foo.index)) 
Run Code Online (Sandbox Code Playgroud)

我做了这个例子运行:

foo = "Wicked long string"
>>> "".join(sorted(set(foo),key = foo.index))
'Wicked longstr'
>>> "".join(sorted(set(foo)))
' Wcdegiklnorst'
Run Code Online (Sandbox Code Playgroud)

这让我觉得它有助于保持角色的顺序.

ele*_*ent 1

正如其他人提到的,Pythonsorted()函数和sort()列表方法提供了key参数来指定在进行比较之前对每个列表元素调用的函数。

关键是这个key参数是一个函数对象,在调用它时只接受一个参数并返回一个用于排序的值。

匿名“lambda”函数通常用于此目的,因为其定义不包含return语句,因此始终包含返回的一表达式。

例如

>>> myKey = lambda e: id(e)
Run Code Online (Sandbox Code Playgroud)

创建一个(匿名)函数对象

>>> type(myKey)
<class 'function'>
Run Code Online (Sandbox Code Playgroud)

它接受一个参数并返回一个值,因此对于排序是有效的key

如果你现在想调用myKey函数对象,你只需这样做:

>>> myKey(42)
503732608
Run Code Online (Sandbox Code Playgroud)

为了解决您的问题,您可以创建一个 lambda 函数,key它接受一个元素并返回其在foo字符串中的索引以保持字符的顺序:

>>> foo = "Wicked long string"
>>> "".join(sorted(set(foo), key = lambda e: foo.index(e)))
'Wicked longstr'
Run Code Online (Sandbox Code Playgroud)

另一方面,由于foo.index是一个函数对象本身,它接受一个参数并返回一个值,因此您可以将此对象传递给函数sorted()并绕过 lambda 定义:

>>> "".join(sorted(set(foo),key = foo.index))
'Wicked longstr'
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)