&引用;索引“;属性-Python
当我阅读这个关于从字符串中删除重复项的问题的答案时,我不明白&引用;索引“;属性-Python,python,indexing,Python,Indexing,当我阅读这个关于从字符串中删除重复项的问题的答案时,我不明白索引属性在 ''.join(sorted(set(foo), key=foo.index)) 我运行了以下示例: foo = "Wicked long string" >>> "".join(sorted(set(foo),key = foo.index)) 'Wicked longstr' >>> "".join(sorted(set(foo))) ' Wcdegiklnorst' 这让我觉得
索引
属性在
''.join(sorted(set(foo), key=foo.index))
我运行了以下示例:
foo = "Wicked long string"
>>> "".join(sorted(set(foo),key = foo.index))
'Wicked longstr'
>>> "".join(sorted(set(foo)))
' Wcdegiklnorst'
这让我觉得它有助于保持字符的顺序。
索引是一种用于大多数有序序列的方法,用于查找该序列中某个元素的第一次出现。例如,“我的字符串在这里。”。索引(“”
将返回2
,因为“
的第一次出现在位置2
。它用于字符串、元组、列表等。上的文档有更多关于它的信息。正如其他Pythonssorted()
函数所提到的,列表的sort()
方法提供了键
参数,用于在进行比较之前指定要在每个列表元素上调用的函数
关键是这个key
参数是一个函数对象,当它只被调用一个参数时,它会接受,并返回一个用于排序的值
匿名通常用于此目的,因为其定义不包括return
语句,因此始终包含一个返回的表达式
比如说
>>> myKey = lambda e: id(e)
创建(匿名)函数对象
为了解决您的问题,您可以创建一个lambda函数作为key
,它接受一个元素并在foo
字符串中返回其索引,以保持字符的顺序:
>>> foo = "Wicked long string"
>>> "".join(sorted(set(foo), key = lambda e: foo.index(e)))
'Wicked longstr'
另一方面,由于foo.index
本身是一个函数对象,它接受一个参数并返回一个值,因此可以将此对象传递给sorted()
函数,并通过lambda定义:
>>> "".join(sorted(set(foo),key = foo.index))
'Wicked longstr'
希望这有帮助:)好的。。。那么你的问题是什么呢?所有序列都支持.index
方法,请参见此部分使用原始列表索引对集合
(无序)进行排序。因此,您将获得与原始列表相同的顺序。如果没有键
,它只会按词汇对字符进行排序。@CoryKramer,我不知道.index
是什么,因为它与无关。index(sub[,start[,end]])
,是吗?@AChampion,因此,如果我在foo:print I.index中为I运行>>,它将返回每个列表元素的原始索引?我理解索引在有参数时的用法。我似乎不明白的是,当它被用作一个属性时,方法不是特殊的属性,仅仅因为它们是方法;它们是可以像其他任何东西一样移动和引用的属性。sorted
函数有自己的排序方式,但您也可以指定一个键。该键是一个函数,当给定一个值时,它返回一个特定的数字,sorted
将使用该数字将该值放入其列表中。在这种情况下,每个元素的值都是它在foo
中的索引。这样,所有相等的元素都将具有相同的排序值,因此将彼此相邻排序。@tulians该属性只是一个变量,用于存储对该函数的引用,您可以像其他任何东西一样使用该函数。试试这个:x='hello'。索引
然后像调用x('o')
,x('e')
,x('y')
。
>>> foo = "Wicked long string"
>>> "".join(sorted(set(foo), key = lambda e: foo.index(e)))
'Wicked longstr'
>>> "".join(sorted(set(foo),key = foo.index))
'Wicked longstr'