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
。