Python - 在列表中找到最短的单词

时间:2015-03-29 05:08:36

标签: python string list word shortest

大家知道我可能已经提出了一些类似的问题,但如果你能为我的尝试提供更具体的解决方案,我将不胜感激。

基本上程序应该返回列表中最短的单词。最短的单词不能是空字符串。 < - 我也不知道如何做这部分。

感谢您的帮助! :)

主程序:

    n = int((input("Enter amount of words: "))
    sw = st.word(n)
    print("The shortest word is: {0:.s}" .format(sw))

功能:

    def word(n):

        l1 = []

        for i in range(n):
            words = str(input("Enter word: "))
            l1.append(words)

        s = l1
        nxt = l1

        for i in range(n+1): 
            if s[i] < nxt[i+1]:
                smallest = s[i]
            if nxt[i+1] < s[i]:
                smallest = nxt[i+1]
        return smallest

4 个答案:

答案 0 :(得分:5)

你可以在min函数中使用build:

l = ["ab", "abc", "", "fff", "gdfgfdg","a", "3455"]


print(min((word for word in l if word), key=len))
# results in: a

一些解释:

  • (word for word in l if word)generator expression

  • if word条件确保不使用空字符串,

  • key=len 使用每个单词的长度来寻找minium

答案 1 :(得分:3)

你应该总是喜欢使用内置函数而不是自己编写(可能除了你学习的情况)。 @Marcin非常好地描述了min函数的工作,因此,我想向您展示filter函数作为生成器表达式的替代。

让我们看看minfilter如何协同工作的方式:

In [1]: l = ["ab", "abc", "", "fff", "gdfgfdg","a", "3455"]

In [2]: min(filter(None, l), key=len)
Out[2]: 'a'

@Marcin解决方案相比,它可能不太直观,但我更喜欢使用高阶函数而不是生成器。阅读文字,其中一个单词的频率为40%(word for word in l if word - 3/7) - 不,谢谢:)。

只是引用文档:

In [3]: filter?
Type:        type
String form: <class 'filter'>
Namespace:   Python builtin
Docstring:
filter(function or None, iterable) --> filter object

Return an iterator yielding those items of iterable for which function(item)
is true. If function is None, return the items that are true

答案 2 :(得分:0)

如果你想要第一个最小单词。

n = raw_input('Enter words breaking with spaces:')

wordList = n.split()

print min([(word, len(word)) for word in wordList], key=lambda x:x[1])

如果你想要所有最小的单词。

n = raw_input('Enter words breaking with spaces:')

wordList = n.split()

minimunWordLength = min([len(word) for word in wordList])
minimunWords = filter(lambda x:len(x) == minimunWordLength,wordList)

print minimunWords

答案 3 :(得分:0)

<强> ALGO:

  1. raw_input()获取数字字词的用户输入。当用户输入错误的输入时处理异常处理,即非整数值。
  2. 检查输入数字是否为磨机,然后为0。如果是,请转到下一步。否则打印You enter value less then 1.
  3. 调用getSmallWord函数,将单词计数器作为参数传递。
  4. 使用for循环和range函数接受来自用户的单词并添加到set变量,因为单词可能与用户重复,set不会添加重复的单词。
  5. set中的第一个元素指定为最小元素,并从set中删除此单词。
  6. 迭代set中的每个元素并检查当前元素,即字长是否小于最小字,然后将该字指定为最小字。
  7. 返回最小的单词。
  8. 打印结果。
  9. <强>演示:

    def getSmallWord(n):
        #- Use set because set will add one one word when user enter duplicate words.
        words = set()
        for i in range(n):
            word = raw_input("Enter word: ")
            words.add(word)
    
        #- Assign First word as smallest.
        smallest_word = words.pop()
    
        #- Iterate words from the 1 index. because we assign 0th element as Smallest.
        for word in words:
            #- Check Lenght of current elemnt from the User Input with the Smallest Word.
            if len(word)<len(smallest_word):
                smallest_word = word
    
        return smallest_word
    
    
    if __name__=="__main__":
        try:
            n = int(raw_input("Enter amount of words: "))
        except ValueError:
            n = 5
            print "Enter Wrong number input. Number of Words are %d"%n      
    
        if n>0:
            sw = getSmallWord(n)
            print "The shortest word is: %s" %sw
        else:
            print "You enter value less then 1." 
    

    <强>输出:

    vivek@vivek:~/Desktop/stackoverflow/anna$ python 8.py 
    Enter amount of words: 5
    Enter word: qwert
    Enter word: asdf
    Enter word: as
    Enter word: asdf
    Enter word: qwer
    The shortest word is: as
    

    注意:

    对Python 2.x使用raw_input()

    对Python 3.x使用input()