Python 根据不同字符的数量对字符串进行排序

Python 根据不同字符的数量对字符串进行排序,python,Python,我不明白为什么下面的代码需要set()和list()部分,它是根据字符串的不同字母表数对字符串进行排序的 strings = ['foo', 'card', 'bar', 'aaaa', 'abab'] strings.sort(key = lambda x: len(set(list(x)))) print(strings) 谢谢事实上,该代码的关键是set()函数。为什么?因为它将返回一个包含不重复元素的集合。例如: set('foo') -> ['f', 'o'] set('aa

我不明白为什么下面的代码需要
set()
list()
部分,它是根据字符串的不同字母表数对字符串进行排序的

strings = ['foo', 'card', 'bar', 'aaaa', 'abab']

strings.sort(key = lambda x: len(set(list(x))))
print(strings)

谢谢

事实上,该代码的关键是
set()
函数。为什么?因为它将返回一个包含不重复元素的集合。例如:

set('foo') -> ['f', 'o']
set('aaaa') -> ['a']
set('abab') -> ['a', 'b']
>>> (len(set(strings[0][:])) < len(set(strings[1][:])))
True

然后,为了根据不同字母的数量进行排序,使用了
len()
函数。

事实上,该代码的关键是
set()
函数。为什么?因为它将返回一个包含不重复元素的集合。例如:

set('foo') -> ['f', 'o']
set('aaaa') -> ['a']
set('abab') -> ['a', 'b']
>>> (len(set(strings[0][:])) < len(set(strings[1][:])))
True

然后,为了根据不同字母的数量进行排序,使用
len()
函数。

问得好!让我们剥离
sort()
调用的层

根据上的
排序
排序

key指定一个参数的函数,该参数用于从每个列表元素中提取比较键:key=str.lower。默认值为无(直接比较元素)

也就是说,
sort
接受关键字参数
key
,并期望它是一个函数。具体来说,它需要一个
key(x)
函数,用于为
strings
列表中的每个字符串生成键值,而不是通常的词汇顺序。在Python shell中:

>>> key = lambda x: len(set(list(x)))
>>> ordering = [key(x) for x in strings]
>>> ordering
[2, 3, 1, 2, 2, 4]
这可以是您喜欢的任何订购方案。在这里,我们想按唯一字母的数量订购。这就是
设置
列表
的作用<代码>列表(“foo”)将导致
['f','o','o']
。然后我们得到
len(list('foo'))==3
——单词的长度。不是唯一字符的数量

>>> key2 = lambda x: len(list(x))
>>> ordering2 = [key2(x) for x in strings]
>>> ordering2
[3, 3, 4, 4, 4, 4]
因此,我们使用
set
list
来获得一组字符。
集合
类似于
列表
,只是它们只包含
列表
的唯一元素。例如,我们可以为以下任何单词创建一个字符列表:

>>> list(strings[0])
['f', 'o', 'o']
和一套:

>>> set(list(strings[0]))
set(['o', 'f'])
集合的
len()
是2,因此当
sort
strings[0]
中的“foo”与
strings
中的所有其他
strings[x]
进行比较时,它使用此列表。例如:

set('foo') -> ['f', 'o']
set('aaaa') -> ['a']
set('abab') -> ['a', 'b']
>>> (len(set(strings[0][:])) < len(set(strings[1][:])))
True

问得好!让我们剥离
sort()
调用的层

根据上的
排序
排序

key指定一个参数的函数,该参数用于从每个列表元素中提取比较键:key=str.lower。默认值为无(直接比较元素)

也就是说,
sort
接受关键字参数
key
,并期望它是一个函数。具体来说,它需要一个
key(x)
函数,用于为
strings
列表中的每个字符串生成键值,而不是通常的词汇顺序。在Python shell中:

>>> key = lambda x: len(set(list(x)))
>>> ordering = [key(x) for x in strings]
>>> ordering
[2, 3, 1, 2, 2, 4]
这可以是您喜欢的任何订购方案。在这里,我们想按唯一字母的数量订购。这就是
设置
列表
的作用<代码>列表(“foo”)
将导致
['f','o','o']
。然后我们得到
len(list('foo'))==3
——单词的长度。不是唯一字符的数量

>>> key2 = lambda x: len(list(x))
>>> ordering2 = [key2(x) for x in strings]
>>> ordering2
[3, 3, 4, 4, 4, 4]
因此,我们使用
set
list
来获得一组字符。
集合
类似于
列表
,只是它们只包含
列表
的唯一元素。例如,我们可以为以下任何单词创建一个字符列表:

>>> list(strings[0])
['f', 'o', 'o']
和一套:

>>> set(list(strings[0]))
set(['o', 'f'])
集合的
len()
是2,因此当
sort
strings[0]
中的“foo”与
strings
中的所有其他
strings[x]
进行比较时,它使用此列表。例如:

set('foo') -> ['f', 'o']
set('aaaa') -> ['a']
set('abab') -> ['a', 'b']
>>> (len(set(strings[0][:])) < len(set(strings[1][:])))
True

是的,但是在我的测试中,如果没有
列表(…)
调用,它似乎可以工作。“我想不出它需要它的理由。你是对的,@PeterGibson。它不需要它,因为字符串是可编辑的,就像列表一样。是的,但是在我的测试中,它似乎在没有
list(…)
调用的情况下工作。“我想不出它需要它的理由。你是对的,@PeterGibson。它不需要它,因为字符串是可编辑的,就像列表一样。你不需要
list
。你不需要
list