创建一个函数,该函数 returns 给定的字符串按降序(不反转)顺序排列
Create a function that returns a given string in descending(NOT REVERSE) order
我在期末考试时遇到了这个问题,但我想不通。我最初尝试使用 for i in range(len(string)-1) 循环来比较索引中字符的数值。
我知道我可以只使用列表对列表进行排序然后反向打印,但我们被告知我们不能使用列表或反向和排序功能。
也不能使用 print(string[ : :-1]) 技术,因为这不是反转字符串,而是将其降序排列。例如,字符串 "Hello" 将输出 "ollhe" 而不是 "olleh" 而字符串 "world" 将输出 "wrold" 而不是 "dlrow"
如果有人能帮助我,我将不胜感激。
尝试使用以下几个字符串作为 st
。
def finalexamquestion(st):
st = st.lower()
max = 'a'
result = ""
for j in range(len(st)):
for i in range(len(st)):
if st[i] >= max:
max = st[i]
idx = i
st = st[:idx]+st[idx+1:]
result += max
max = 'a'
# print result
return result
使用字符的 ASCII 值查找字符串中的最大值(后面是字母表)。这基本上是一个处理字符串和排序字符的排序函数。您可以实现更好的排序算法,例如 QuickSort(我的实现使用 O(n^2))。 O(nlogn) 有更好的算法,但这不是重点,所以我用那个实现它。
对于字符串中的每个字符,找到最大值并将其从字符串中删除。
尚不清楚该函数是否应该仅适用于字母表字母或标点符号(以及 space),因此我假设仅适用于字母表中的 26 个字母。然而,对此的扩展很简单。
def descent_alphabetically(word):
# Lazy way of constructing 'zyxw...dcba'
alphabet = ''.join(chr(i) for i in xrange(122, 96, -1))
word = word.lower()
return ''.join(letter * word.count(letter) for letter in alphabet)
这个想法是你以相反的顺序浏览字母表中的字母,然后数一数你的单词中有多少个。如果计数为 0,则字符串乘法将为空,而例如,如果字母 'a' 为三,则会得到 'aaa'.
你说列表是允许的。我不知道这是否也会扩展到 range()
,因为它会生成一个列表。但是您始终可以按照希望它们出现的相反顺序对字母表的 "symbols" 进行硬编码。由于不允许使用列表,这是否也意味着 list/generator 推导式也不允许?您可以通过将语法更改为:
来避免这种情况
result = ''
for letter in alphabet:
result += letter * word.count(letter)
例子
descent_alphabetically('Hello')
'ollhe'
>>> descent_alphabetically('world')
'wrold'
>>> descent_alphabetically('alphabet')
'tplhebaa'
我在期末考试时遇到了这个问题,但我想不通。我最初尝试使用 for i in range(len(string)-1) 循环来比较索引中字符的数值。
我知道我可以只使用列表对列表进行排序然后反向打印,但我们被告知我们不能使用列表或反向和排序功能。
也不能使用 print(string[ : :-1]) 技术,因为这不是反转字符串,而是将其降序排列。例如,字符串 "Hello" 将输出 "ollhe" 而不是 "olleh" 而字符串 "world" 将输出 "wrold" 而不是 "dlrow"
如果有人能帮助我,我将不胜感激。
尝试使用以下几个字符串作为 st
。
def finalexamquestion(st):
st = st.lower()
max = 'a'
result = ""
for j in range(len(st)):
for i in range(len(st)):
if st[i] >= max:
max = st[i]
idx = i
st = st[:idx]+st[idx+1:]
result += max
max = 'a'
# print result
return result
使用字符的 ASCII 值查找字符串中的最大值(后面是字母表)。这基本上是一个处理字符串和排序字符的排序函数。您可以实现更好的排序算法,例如 QuickSort(我的实现使用 O(n^2))。 O(nlogn) 有更好的算法,但这不是重点,所以我用那个实现它。
对于字符串中的每个字符,找到最大值并将其从字符串中删除。
尚不清楚该函数是否应该仅适用于字母表字母或标点符号(以及 space),因此我假设仅适用于字母表中的 26 个字母。然而,对此的扩展很简单。
def descent_alphabetically(word):
# Lazy way of constructing 'zyxw...dcba'
alphabet = ''.join(chr(i) for i in xrange(122, 96, -1))
word = word.lower()
return ''.join(letter * word.count(letter) for letter in alphabet)
这个想法是你以相反的顺序浏览字母表中的字母,然后数一数你的单词中有多少个。如果计数为 0,则字符串乘法将为空,而例如,如果字母 'a' 为三,则会得到 'aaa'.
你说列表是允许的。我不知道这是否也会扩展到 range()
,因为它会生成一个列表。但是您始终可以按照希望它们出现的相反顺序对字母表的 "symbols" 进行硬编码。由于不允许使用列表,这是否也意味着 list/generator 推导式也不允许?您可以通过将语法更改为:
result = ''
for letter in alphabet:
result += letter * word.count(letter)
例子
descent_alphabetically('Hello')
'ollhe'
>>> descent_alphabetically('world')
'wrold'
>>> descent_alphabetically('alphabet')
'tplhebaa'