在这个排序算法中,元组的返回语句中0的索引在哪里?

2024-10-04 01:32:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一种排序算法,将小写字母放在前面,然后是大写字母,然后是奇数,最后是偶数。例如String1234变成ginrtS1324

代码

def getKey(x):
    if x.islower():
        return(1,x)
    elif x.isupper():
        return(2,x)
    elif x.isdigit():
        if int(x)%2 == 1:
            return(3,x)
        else:
            return(4,x)

print(*sorted('String1234',key=getKey),sep='')

我知道元组返回为(1, g), (1,i)... (2, S), (3, 1), (3, 3) (4, 2), (4,4)。我不明白的是为什么要创建一个列表:['g', 'i', 'n', 'r', 't', '1', '3', '2', '4']以及元组的0索引发生了什么


Tags: 代码算法returnif排序def大写字母元组
1条回答
网友
1楼 · 发布于 2024-10-04 01:32:37

sorted返回一个排序列表,其中包含传递给它的任何iterable的元素:

>>> sorted('String1234')
['1', '2', '3', '4', 'S', 'g', 'i', 'n', 'r', 't']

如果要将其转换回字符串,一种简单的方法是join()

>>> ''.join(sorted('String1234'))
'1234Sginrt'

如果传递key参数,则结果键(通过调用每个要排序的元素上的key函数获得)将用于排序中的比较,但输出仍然是由原始元素生成的,而不是键

>>> ''.join(sorted('String1234', key=getKey))
'ginrtS1324'

如果您想获得元组列表而不是字母列表,您可以通过在排序之前将键函数映射到列表本身来实现这一点(并这样做,而不是将其作为单独的参数传递给^{):

>>> sorted(map(getKey, 'String1234'))
[(1, 'g'), (1, 'i'), (1, 'n'), (1, 'r'), (1, 't'), (2, 'S'), (3, '1'), (3, '3'), (4, '2'), (4, '4')]
>>> ''.join(map(lambda x: ''.join(map(str, x)), sorted(map(getKey, 'String1234'))))
'1g1i1n1r1t2S31334244'

相关问题 更多 >