返回已排序单词列表

时间:2016-03-20 04:04:21

标签: python sorting

我正在尝试返回一个排序单词列表,其中字母按字母顺序排序。例如:

>>> sorted_words(["bet", "abacus", "act", "celebration", "door"])

['act', 'bet', 'door']

我的函数应该返回一个新的排序值列表,但它必须保留第一个字母的unicode低于或等于以下字母的任何单词。例如,“门”被附加到新列表,因为d'< ='o'和'o'< ='o'和'o'< ='r'。这是我到目前为止所写的,但我没有运气。

def sorted_words[wordlist]:
    result = []
    for word in wordlist:
        if word[0] <= word[1:]:
             result.append(word)
    print(word)

我知道这不对,我只是不知道如何将每个单词的第一个字母与其余字母进行比较。任何帮助将不胜感激。我还必须使用sorted()方法,但我不确定如何使用它。

2 个答案:

答案 0 :(得分:2)

您应该将代码分为两部分:第一部分选择单词(根据标准),第二部分对所选单词进行排序。

标准的描述与示例之间存在差异。如果标准是&#34;第一个字母的unicode低于或等于下面的字母&#34;,那么单词&#34; abacus&#34;应该包括在内。但是,您提供的解释&#34; door&#34;似乎是&#34;字符的unicode值应该是(不是严格地)升序&#34;

(&#34;严格上升意味着<,而非严格意味着<=介于元素及其后面的一个。)

对于第一个标准,请使用以下代码

WORDS = ["bet", "abacus", "act", "celebration", "door"]    
list_of_words = []
for word in WORDS:
  if all(word[0] <= c for c in word[1:]):
    list_of_words.append(word)
list_of_words.sort()
print (list_of_words)

对于第二个标准,请使用

list2_of_words = []
for word in WORDS:
  if all(c1 <= c2 for c1,c2 in zip(word[0:-1],word[1:])):
    list2_of_words.append(word)
list2_of_words.sort()
print (list2_of_words)

答案 1 :(得分:0)

你需要另一个循环,所以:

def sorted_words(wordlist):
result = []
for word in wordlist:
    keepWord = True
    for letter in word[1:]:
        if word[0] >= letter:
            keepWord = False
            break
    if keepWord:
        result.append(word)
return result


print(sorted_words(["bet", "abacus", "act", "celebration", "door"]))
['bet', 'act', 'door']